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