Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在CosmosDb v3中使用Newtonsoft.Json吗?_C#_.net Core_Azure Cosmosdb - Fatal编程技术网

C# 我可以在CosmosDb v3中使用Newtonsoft.Json吗?

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=格式

我已经在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方法


重写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吗?您正在自定义序列化选项吗?