首页 > 解决方案 > 我可以将 Newtonsoft.Json 与 CosmosDb v3 一起使用吗?

问题描述

我已按照这些说明NewtonsoftCosmosDb v3一起在我的 Blazor Server 项目中使用。

因此我Startup.cs指定了几个设置和转换器。

  services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        options.SerializerSettings.Formatting = Formatting.Indented;
        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
        options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Ignore;
        options.SerializerSettings.Converters.Add(new ISubfileConverter());
        options.SerializerSettings.Converters.Add(new ISubunitConverter());
        options.SerializerSettings.Converters.Add(new IElementConverter());
        options.SerializerSettings.Converters.Add(new IMetadataConverter());
    });

    services.AddSingleton<ICosmosSrcDocService>(InitializeCosmosSrcClientInstance(Configuration.GetSection("SourceCosmosDb"))
                .GetAwaiter().GetResult());


但是,当我使用UpsertItemAsync()它时,它似乎并没有使用它。

有没有办法告诉 CosmosDbStartup.cs 使用这个配置?

更新 Cosmos 配置

   CosmosClientBuilder clientBuilder = new CosmosClientBuilder(account, key);
   CosmosClient client = clientBuilder
      .WithConnectionModeDirect()
      .Build();
      CosmosTrgDocService cosmosDbService = new CosmosTrgDocService(client, databaseName, containerName);

标签: c#.net-coreazure-cosmosdb

解决方案


我发现CosmosClientBuilder有一个WithCustomSerializer()方法。这让我发现您可以从中派生一个类CosmosSerializer,然后将其传递给该WithCustomSerializer()方法。

当您覆盖ToStream<T>andFromStream<T>方法时,您可以控制序列化。另请参阅此示例


推荐阅读