为什么 Azure CosmosDB 将字典对象值保存为“ValueKind”:数字?

问题描述 投票:0回答:1

我使用的是 C# .Net 8.0、Azure Cosmos DB SDK 3.40.0 (NoSQL)。 我有一条记录定义如下(所有不相关的字段和代码已被删除),即:

  public record test_rec {
      
      private System.Collections.Generic.Dictionary<String, Object> m_custom;
      
      public System.Collections.Generic.Dictionary<String, Object> custom
      {

         get
         {
            return m_custom;
         }

         set
         {
            m_custom = value;
         }

      }
      
      // Constructor ...

      public test_rec()
      {

         init_members();

      }

      private void init_members()
      {

         m_custom = null;

      }
      
  }

“自定义”属性用于存储键和值,例如:

test_rec rec;
  
rec = new test_rec();

rec.custom = new System.Collections.Generic.Dictionary<String,Object>();

rec.custom.Add( "key1", null );
rec.custom.Add( "key2", "string" );
rec.custom.Add( "key3", 100 );

我可以使用 Cosmos DB SDK 创建记录(将其保存到数据库),没有任何问题。 但是,当我检查记录属性(通过 Azure 门户)时,我看到以下 JSON:

     "custom": {
        "key1": null,
        "key2": {
            "ValueKind": 3
        },
        "key3": {
            "ValueKind": 4
        }
    },

我期待以下内容:

   "custom": {
      "key1": null,
      "key2": "string",
      "key3": 100
   }

有人可以详细说明此行为或提供有关如何保留字典中的值的说明或提供解决方法吗?

提前致谢。

c# json.net azure-cosmosdb system.text.json
1个回答
0
投票

我发现的一个解决方法(来自SO问题76693447)是使用利用System.Text.Json的自定义序列化器。 相关代码可以在:

https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage/SystemTextJson

但是,如果其他人有任何想法或解决方案,请随时发布。

Microsoft - 这是目前唯一的解决方案吗?

© www.soinside.com 2019 - 2024. All rights reserved.