我正在使用Json.Net装饰我的文档属性。
PacakgeA
当我在cosmos db中更新文档时,它没有更新为字符串值。它始终默认为默认的枚举值。我如何使其序列化和反序列化为字符串值。我不想使用数字,就好像我添加了一个新的枚举值那样,事情就会破裂。
答案 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解析回来。