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

Rag*_*hav 4 json.net azure-cosmosdb

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

public class MyDocumentType : Document
{
    [JsonProperty]
    [JsonConverter(typeof(StringEnumConverter))]
    public MyEnumType EnumProertyName{ get; set; }

    [JsonProperty]
    public uint MyIntPrperty{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

Ank*_*jay 7

使用Cosmos DB SDK 3+,无法JsonSerializerSettings直接通过。

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

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

一旦您的代码中有了 CosmosSerializer 的实现,您就可以JsonSerializerSettings按如下方式传递:

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

var cosmosClient = new CosmosClient(connectionString, cosmosClientOptions);
Run Code Online (Sandbox Code Playgroud)