diff --git a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultRequestResponseSerializer.cs b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultRequestResponseSerializer.cs index 7360fa1f075..e8cdac4aae9 100644 --- a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultRequestResponseSerializer.cs +++ b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/DefaultRequestResponseSerializer.cs @@ -95,7 +95,7 @@ internal DefaultRequestResponseSerializerOptionsProvider(IElasticsearchClientSet private static IReadOnlyCollection CreateDefaultBuiltInConverters(IElasticsearchClientSettings settings) => [ - new KeyValuePairConverterFactory(settings), + new KeyValuePairConverterFactory(), new ObjectToInferredTypesConverter(), new SourceConverterFactory(settings), new SelfSerializableConverterFactory(settings), diff --git a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs index b68fff3e6cc..f63699803a0 100644 --- a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs @@ -7,16 +7,10 @@ using System.Text.Json; using System.Text.Json.Serialization; -using Elastic.Transport; - namespace Elastic.Clients.Elasticsearch.Serialization; internal sealed class KeyValuePairConverterFactory : JsonConverterFactory { - private readonly IElasticsearchClientSettings _settings; - - public KeyValuePairConverterFactory(IElasticsearchClientSettings settings) => _settings = settings; - public override bool CanConvert(Type typeToConvert) => typeToConvert.IsGenericType && typeToConvert.GetGenericTypeDefinition() == typeof(KeyValuePair<,>); @@ -28,29 +22,25 @@ public override JsonConverter CreateConverter( var itemOneType = type.GetGenericArguments()[0]; var itemTwoType = type.GetGenericArguments()[1]; - return (JsonConverter)Activator.CreateInstance(typeof(KeyValuePairConverter<,>).MakeGenericType(itemOneType, itemTwoType), _settings); + return (JsonConverter)Activator.CreateInstance(typeof(KeyValuePairConverter<,>).MakeGenericType(itemOneType, itemTwoType)); } private class KeyValuePairConverter : JsonConverter> { - private readonly IElasticsearchClientSettings _settings; - - public KeyValuePairConverter(IElasticsearchClientSettings settings) => _settings = settings; - public override KeyValuePair Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException("Unexpected token for KeyValuePair"); reader.Read(); // property name (key) - var keyString = reader.GetString(); + var converter = (JsonConverter)options.GetConverter(typeof(TItem1)); + var key = converter.ReadAsPropertyName(ref reader, typeof(TItem1), options); reader.Read(); // value var value = JsonSerializer.Deserialize(ref reader, options); reader.Read(); // end object - var key = (TItem1)Activator.CreateInstance(typeof(TItem1), keyString); return new KeyValuePair(key, value); } @@ -59,16 +49,10 @@ public override void Write(Utf8JsonWriter writer, KeyValuePair v { writer.WriteStartObject(); - if (value.Key is IUrlParameter parameter) - { - writer.WritePropertyName(parameter.GetString(_settings)); - } - else - { - writer.WritePropertyName(value.Key.ToString()); - } + var converter = (JsonConverter)options.GetConverter(typeof(TItem1)); + converter.WriteAsPropertyName(writer, value.Key, options); + JsonSerializer.Serialize(writer, value.Value, options); - JsonSerializer.Serialize(writer, value.Value, options); writer.WriteEndObject(); } }