如何配置 Cosmos DB .NET 3.0 SDK 以使用驼峰式序列化?

use*_*640 5 .net azure-cosmosdb

我的 .NET POCO 在ProperCase. 我的 json 在camelCase. 如何配置 .NET SDK 的 3.0 版以在与 Cosmos DB 之间进行序列化/反序列化时进行转换?

我知道我可以将属性添加[JsonProperty(PropertyName = "myProperty")]到每个属性,但如何告诉 SDK 默认为所有属性执行此操作?

我试图避免为每个属性添加一个属性。

小智 10

var client = new CosmosClientBuilder("URI", "Key")
        .WithSerializerOptions(new CosmosSerializationOptions {  PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase })
        .Build();
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到堆栈溢出!虽然此代码可以解决问题,但[包括解释](//meta.stackexchange.com/q/114762) 如何以及为何解决问题确实有助于提高帖子的质量,并可能会带来更多结果赞成票。请记住,您是在为将来的读者回答问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 (6认同)

Ben*_*iFB 6

看起来序列化器设置现在已公开,因此您可以执行以下操作:

        var client = new CosmosClient(uri, key, new CosmosClientOptions()
        {
            SerializerOptions = new CosmosSerializationOptions()
            {
                PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase,
            }
        });
Run Code Online (Sandbox Code Playgroud)

我已经使用 Microsoft.Azure.Cosmos 3.26.1 对此进行了测试,这样,我的 LINQ 查询中的 WHERE 子句就能正确地将 POCO 中的“PropertyId”映射到文档中的“propertyId”。


Man*_*ham 0

您可以使用所需的 JSON.Net 设置来配置自己的 JSON 序列化器类。

var cosmos = new CosmosClientBuilder("http://cosmosdb", "key")
                .UseCustomJsonSerializer(new CustomJsonSerializer())
                .Build();
Run Code Online (Sandbox Code Playgroud)

抽象类定义CosmosJsonSerializer一对简单的 to/from streamtoT方法。