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)
看起来序列化器设置现在已公开,因此您可以执行以下操作:
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”。
您可以使用所需的 JSON.Net 设置来配置自己的 JSON 序列化器类。
var cosmos = new CosmosClientBuilder("http://cosmosdb", "key")
.UseCustomJsonSerializer(new CustomJsonSerializer())
.Build();
Run Code Online (Sandbox Code Playgroud)
的抽象类定义是CosmosJsonSerializer一对简单的 to/from streamtoT方法。