C# 我可以在CosmosDb v3中使用Newtonsoft.Json吗?
我已经在Blazor服务器项目中使用了Newtonsoft和CosmosDb v3 因此,my Startup.cs指定了几个设置和转换器 services.AddControllers .AddNewtonsoftJsonoptions=> { options.SerializerSettings.ContractResolver=新的CamelCasePropertyNamesContractResolver; options.SerializerSettings.Formatting=格式化。缩进; options.SerializerSettings.NullValueHandling=NullValueHandling.Ignore; options.SerializerSettings.DefaultValueHandling=DefaultValueHandling.Ignore; options.SerializerSettings.Converters.Addnew ISubfileConverter; options.SerializerSettings.Converters.Addnew ISubunitConverter; options.SerializerSettings.Converters.Addnew IElementConverter; options.SerializerSettings.Converters.Addnew IMetadataConverter; }; services.addSingleTonInitializeCosmosRcclientInstanceConfiguration.GetSectionSourceCosmosDb .GetAwaiter.GetResult; 但是,当我使用UpsertItemAsync时,它似乎没有使用它 有没有办法告诉Startup.cs中的CosmosDb使用此配置 使用Cosmos配置更新 CosmosClientBuilder客户端生成器=新的CosmosClientBuilderaccount,键; CosmosClient=clientBuilder .WithConnectionModeDirect 建筑 CosmosTrgDocService cosmosDbService=新CosmosTrgDocServiceclient,数据库名称,容器名称; 我发现CosmosClientBuilder有一个WithCustomSerializer方法。这让我知道可以从派生类,然后将其传递给WithCustomSerializer方法C# 我可以在CosmosDb v3中使用Newtonsoft.Json吗?,c#,.net-core,azure-cosmosdb,C#,.net Core,Azure Cosmosdb,我已经在Blazor服务器项目中使用了Newtonsoft和CosmosDb v3 因此,my Startup.cs指定了几个设置和转换器 services.AddControllers .AddNewtonsoftJsonoptions=> { options.SerializerSettings.ContractResolver=新的CamelCasePropertyNamesContractResolver; options.SerializerSettings.Formatting=格式
重写ToStream和FromStream方法时,可以控制序列化 为了扩展帮助我的@phil answer,我使用了以下方法,解决了我试图克服的自引用循环检测错误消息。我不想按照其他建议将JsonIgnore属性放在我的POCO上
var client = new CosmosClientBuilder(databaseSettings.ConnectionString)
.WithCustomSerializer(new CustomCosmosSerializer())
.Build();
和下面的序列化程序
public class CustomCosmosSerializer : CosmosSerializer
{
private readonly JsonSerializer _serializer;
public CustomCosmosSerializer()
{
_serializer = new JsonSerializer
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
}
public override T FromStream<T>(Stream stream)
{
using (stream)
{
if (typeof(Stream).IsAssignableFrom(typeof(T)))
{
return (T)(object)(stream);
}
using (StreamReader sr = new StreamReader(stream))
{
using (JsonTextReader jsonTextReader = new JsonTextReader(sr))
{
return _serializer.Deserialize<T>(jsonTextReader);
}
}
}
}
public override Stream ToStream<T>(T input)
{
MemoryStream streamPayload = new MemoryStream();
using (StreamWriter streamWriter = new StreamWriter(streamPayload, encoding: Encoding.Default, bufferSize: 1024, leaveOpen: true))
{
using (JsonWriter writer = new JsonTextWriter(streamWriter))
{
writer.Formatting = Formatting.None;
_serializer.Serialize(writer, input);
writer.Flush();
streamWriter.Flush();
}
}
streamPayload.Position = 0;
return streamPayload;
}
}
您展示了如何在ASPNET上配置Newtonsoft,您能展示一下如何创建CosmosClient吗?您正在自定义序列化选项吗?