将Cosmos DB文档属性序列化和反序列化为字符串

时间:2018-08-03 18:05:33

标签: json.net azure-cosmosdb

我正在使用Json.Net装饰我的文档属性。

PacakgeA

当我在cosmos db中更新文档时,它没有更新为字符串值。它始终默认为默认的枚举值。我如何使其序列化和反序列化为字符串值。我不想使用数字,就好像我添加了一个新的枚举值那样,事情就会破裂。

2 个答案:

答案 0 :(得分:1)

使用Cosmos DB SDK 3+,您不能直接传递JsonSerializerSettings

您需要扩展CosmosSerializer。您可以从Cosmos DB SDK中的CosmosJsonDotNetSerializer获取CosmosSerializer实现的示例。

不幸的是,此类是internal sealed,因此您可能在代码中逐字复制。我还提出了一个GitHub问题,要求Cosmos团队解决此问题here

一旦您的代码中提供了CosmosSerializer的实现,您可以通过以下方式传递JsonSerializerSettings

// Create CosmosClientOptions
var cosmosClientOptions = new CosmosClientOptions
                {
                    Serializer =
                   new CosmosJsonDotNetSerializer(
                      new JsonSerializerSettings() {
                          // Your JSON Serializer settings
                      })
                 };

var cosmosClient = new CosmosClient(connectionString, cosmosClientOptions);

答案 1 :(得分:0)

构造DocumentClient对象时,您可以传递JsonSerializerSettings对象。在该对象中,您需要添加对字符串值的处理,如下所示:

        new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            DateFormatString = "o",
            DateFormatHandling = DateFormatHandling.IsoDateFormat,

            Converters = new List<JsonConverter>
            {
                new Newtonsoft.Json.Converters.StringEnumConverter()
                {
                    AllowIntegerValues = true
                }
            },
        };

StringEnumConverter-这应该将枚举序列化/反序列化为字符串,同时还允许从int解析回来。