diff --git a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs index 7a9d39935fe..b68fff3e6cc 100644 --- a/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs @@ -4,9 +4,9 @@ using System; using System.Collections.Generic; -using System.Reflection; using System.Text.Json; using System.Text.Json.Serialization; + using Elastic.Transport; namespace Elastic.Clients.Elasticsearch.Serialization; @@ -17,9 +17,9 @@ internal sealed class KeyValuePairConverterFactory : JsonConverterFactory public KeyValuePairConverterFactory(IElasticsearchClientSettings settings) => _settings = settings; - public override bool CanConvert(Type typeToConvert) => typeToConvert.IsGenericType - && typeToConvert.Name == typeof(KeyValuePair<,>).Name - && typeof(IUrlParameter).IsAssignableFrom(typeToConvert.GetGenericArguments()[0]); + public override bool CanConvert(Type typeToConvert) => + typeToConvert.IsGenericType && + typeToConvert.GetGenericTypeDefinition() == typeof(KeyValuePair<,>); public override JsonConverter CreateConverter( Type type, @@ -31,7 +31,7 @@ public override JsonConverter CreateConverter( return (JsonConverter)Activator.CreateInstance(typeof(KeyValuePairConverter<,>).MakeGenericType(itemOneType, itemTwoType), _settings); } - private class KeyValuePairConverter : JsonConverter> where TItem1 : class, IUrlParameter + private class KeyValuePairConverter : JsonConverter> { private readonly IElasticsearchClientSettings _settings; @@ -58,7 +58,16 @@ public override void Write(Utf8JsonWriter writer, KeyValuePair v JsonSerializerOptions options) { writer.WriteStartObject(); - writer.WritePropertyName(value.Key.GetString(_settings)); + + if (value.Key is IUrlParameter parameter) + { + writer.WritePropertyName(parameter.GetString(_settings)); + } + else + { + writer.WritePropertyName(value.Key.ToString()); + } + JsonSerializer.Serialize(writer, value.Value, options); writer.WriteEndObject(); }