44
55using System ;
66using System . Collections . Generic ;
7- using System . Reflection ;
87using System . Text . Json ;
98using System . Text . Json . Serialization ;
9+
1010using Elastic . Transport ;
1111
1212namespace Elastic . Clients . Elasticsearch . Serialization ;
@@ -17,9 +17,9 @@ internal sealed class KeyValuePairConverterFactory : JsonConverterFactory
1717
1818 public KeyValuePairConverterFactory ( IElasticsearchClientSettings settings ) => _settings = settings ;
1919
20- public override bool CanConvert ( Type typeToConvert ) => typeToConvert . IsGenericType
21- && typeToConvert . Name == typeof ( KeyValuePair < , > ) . Name
22- && typeof ( IUrlParameter ) . IsAssignableFrom ( typeToConvert . GetGenericArguments ( ) [ 0 ] ) ;
20+ public override bool CanConvert ( Type typeToConvert ) =>
21+ typeToConvert . IsGenericType &&
22+ typeToConvert . GetGenericTypeDefinition ( ) == typeof ( KeyValuePair < , > ) ;
2323
2424 public override JsonConverter CreateConverter (
2525 Type type ,
@@ -31,7 +31,7 @@ public override JsonConverter CreateConverter(
3131 return ( JsonConverter ) Activator . CreateInstance ( typeof ( KeyValuePairConverter < , > ) . MakeGenericType ( itemOneType , itemTwoType ) , _settings ) ;
3232 }
3333
34- private class KeyValuePairConverter < TItem1 , TItem2 > : JsonConverter < KeyValuePair < TItem1 , TItem2 > > where TItem1 : class , IUrlParameter
34+ private class KeyValuePairConverter < TItem1 , TItem2 > : JsonConverter < KeyValuePair < TItem1 , TItem2 > >
3535 {
3636 private readonly IElasticsearchClientSettings _settings ;
3737
@@ -58,7 +58,16 @@ public override void Write(Utf8JsonWriter writer, KeyValuePair<TItem1, TItem2> v
5858 JsonSerializerOptions options )
5959 {
6060 writer . WriteStartObject ( ) ;
61- writer . WritePropertyName ( value . Key . GetString ( _settings ) ) ;
61+
62+ if ( value . Key is IUrlParameter parameter )
63+ {
64+ writer . WritePropertyName ( parameter . GetString ( _settings ) ) ;
65+ }
66+ else
67+ {
68+ writer . WritePropertyName ( value . Key . ToString ( ) ) ;
69+ }
70+
6271 JsonSerializer . Serialize < TItem2 > ( writer , value . Value , options ) ;
6372 writer . WriteEndObject ( ) ;
6473 }
0 commit comments