diff --git a/src/Kontur.Extern.Api.Client/ApiLevel/Json/JsonSerializerFactory.cs b/src/Kontur.Extern.Api.Client/ApiLevel/Json/JsonSerializerFactory.cs index dc19ad66..90363413 100644 --- a/src/Kontur.Extern.Api.Client/ApiLevel/Json/JsonSerializerFactory.cs +++ b/src/Kontur.Extern.Api.Client/ApiLevel/Json/JsonSerializerFactory.cs @@ -1,3 +1,4 @@ +using System; using System.Text.Json; using Kontur.Extern.Api.Client.ApiLevel.Json.Converters; using Kontur.Extern.Api.Client.ApiLevel.Json.Converters.Docflows; @@ -16,11 +17,14 @@ namespace Kontur.Extern.Api.Client.ApiLevel.Json { public static class JsonSerializerFactory { - public static IJsonSerializer CreateJsonSerializer(ILog log, bool ignoreIndentation = false, bool ignoreNullValues = true) + public static IJsonSerializer CreateJsonSerializer(ILog log, bool ignoreIndentation = false, bool ignoreNullValues = true, Func? setupSerializer = null) { var namingPolicy = new KebabCaseNamingPolicy(); - return new SystemTextJsonSerializerFactory() - .WithNamingPolicy(namingPolicy) + var factory = new SystemTextJsonSerializerFactory(); + if (setupSerializer is not null) + factory = setupSerializer(); + + return factory.WithNamingPolicy(namingPolicy) .AddConverter(new UrnJsonConverter()) .AddConverter(new StringBasedValueTypesConverter()) .AddConverter(new DocflowConverter()) diff --git a/src/Kontur.Extern.Api.Client/ExternFactory.cs b/src/Kontur.Extern.Api.Client/ExternFactory.cs index 456a6338..80da025f 100644 --- a/src/Kontur.Extern.Api.Client/ExternFactory.cs +++ b/src/Kontur.Extern.Api.Client/ExternFactory.cs @@ -16,6 +16,7 @@ using Kontur.Extern.Api.Client.Http.Configurations; using Kontur.Extern.Api.Client.Http.Options; using Kontur.Extern.Api.Client.Http.Serialization; +using Kontur.Extern.Api.Client.Http.Serialization.SysTextJson; using Vostok.Clusterclient.Core.Model; using Vostok.Commons.Time; using Vostok.Logging.Abstractions; @@ -38,14 +39,15 @@ public IExtern Create( IAuthenticator authenticator, IExternHttpClient? api, IHttpRequestFactory? httpRequestFactory, - ILog log) + ILog log, + Func? setupSerializer = null) { contentManagementOptions ??= ContentManagementOptions.Default; pollingStrategy ??= DefaultDelayPollingStrategy; cryptoProvider ??= DefaultCryptoProvider; requestTimeouts ??= new RequestTimeouts(); - var jsonSerializer = JsonSerializerFactory.CreateJsonSerializer(log); + var jsonSerializer = JsonSerializerFactory.CreateJsonSerializer(log, setupSerializer: setupSerializer); httpRequestFactory ??= CreateHttp(clientConfiguration, requestTimeouts, authenticator, jsonSerializer, log); api ??= new ExternHttpClient(httpRequestFactory); var services = new ExternClientServices(contentManagementOptions, httpRequestFactory, jsonSerializer, api, pollingStrategy, authenticator, cryptoProvider);