Могу ли я использовать Newtonsoft. Json с CosmosDb v3? - PullRequest
0 голосов
/ 31 января 2020

Я следовал этим инструкциям , чтобы использовать Newtonsoft в моем проекте Blazor Server вместе с CosmosDb v3 .

Таким образом, мой 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(), кажется, что он его не использует.

Есть ли способ, которым я могу сказать CosmosDb в Startup.cs, чтобы использовать это конфигурация?

ОБНОВЛЕНИЕ с конфигурацией Cosmos

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

1 Ответ

0 голосов
/ 01 февраля 2020

Я обнаружил, что CosmosClientBuilder имеет метод WithCustomSerializer(). Это позволило мне выяснить, что вы можете получить класс из CosmosSerializer и затем передать его в метод WithCustomSerializer().

Когда вы переопределяете ToStream<T> и FromStream<T> методы вы можете контролировать сериализацию. Также см. Этот образец .

...