77using System . Text . Json ;
88using System . Text . Json . Serialization ;
99
10- using Elastic . Transport ;
11-
1210namespace Elastic . Clients . Elasticsearch . Serialization ;
1311
1412internal sealed class KeyValuePairConverterFactory : JsonConverterFactory
1513{
16- private readonly IElasticsearchClientSettings _settings ;
17-
18- public KeyValuePairConverterFactory ( IElasticsearchClientSettings settings ) => _settings = settings ;
19-
2014 public override bool CanConvert ( Type typeToConvert ) =>
2115 typeToConvert . IsGenericType &&
2216 typeToConvert . GetGenericTypeDefinition ( ) == typeof ( KeyValuePair < , > ) ;
@@ -28,29 +22,25 @@ public override JsonConverter CreateConverter(
2822 var itemOneType = type . GetGenericArguments ( ) [ 0 ] ;
2923 var itemTwoType = type . GetGenericArguments ( ) [ 1 ] ;
3024
31- return ( JsonConverter ) Activator . CreateInstance ( typeof ( KeyValuePairConverter < , > ) . MakeGenericType ( itemOneType , itemTwoType ) , _settings ) ;
25+ return ( JsonConverter ) Activator . CreateInstance ( typeof ( KeyValuePairConverter < , > ) . MakeGenericType ( itemOneType , itemTwoType ) ) ;
3226 }
3327
3428 private class KeyValuePairConverter < TItem1 , TItem2 > : JsonConverter < KeyValuePair < TItem1 , TItem2 > >
3529 {
36- private readonly IElasticsearchClientSettings _settings ;
37-
38- public KeyValuePairConverter ( IElasticsearchClientSettings settings ) => _settings = settings ;
39-
4030 public override KeyValuePair < TItem1 , TItem2 > Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
4131 {
4232 if ( reader . TokenType != JsonTokenType . StartObject )
4333 throw new JsonException ( "Unexpected token for KeyValuePair" ) ;
4434
4535 reader . Read ( ) ; // property name (key)
46- var keyString = reader . GetString ( ) ;
36+ var converter = ( JsonConverter < TItem1 > ) options . GetConverter ( typeof ( TItem1 ) ) ;
37+ var key = converter . ReadAsPropertyName ( ref reader , typeof ( TItem1 ) , options ) ;
4738
4839 reader . Read ( ) ; // value
4940 var value = JsonSerializer . Deserialize < TItem2 > ( ref reader , options ) ;
5041
5142 reader . Read ( ) ; // end object
5243
53- var key = ( TItem1 ) Activator . CreateInstance ( typeof ( TItem1 ) , keyString ) ;
5444 return new KeyValuePair < TItem1 , TItem2 > ( key , value ) ;
5545 }
5646
@@ -59,16 +49,10 @@ public override void Write(Utf8JsonWriter writer, KeyValuePair<TItem1, TItem2> v
5949 {
6050 writer . WriteStartObject ( ) ;
6151
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- }
52+ var converter = ( JsonConverter < TItem1 > ) options . GetConverter ( typeof ( TItem1 ) ) ;
53+ converter . WriteAsPropertyName ( writer , value . Key , options ) ;
54+ JsonSerializer . Serialize ( writer , value . Value , options ) ;
7055
71- JsonSerializer . Serialize < TItem2 > ( writer , value . Value , options ) ;
7256 writer . WriteEndObject ( ) ;
7357 }
7458 }
0 commit comments