4
4
5
5
using System ;
6
6
using System . Collections . Generic ;
7
- using System . Reflection ;
8
7
using System . Text . Json ;
9
8
using System . Text . Json . Serialization ;
9
+
10
10
using Elastic . Transport ;
11
11
12
12
namespace Elastic . Clients . Elasticsearch . Serialization ;
@@ -17,9 +17,9 @@ internal sealed class KeyValuePairConverterFactory : JsonConverterFactory
17
17
18
18
public KeyValuePairConverterFactory ( IElasticsearchClientSettings settings ) => _settings = settings ;
19
19
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 < , > ) ;
23
23
24
24
public override JsonConverter CreateConverter (
25
25
Type type ,
@@ -31,7 +31,7 @@ public override JsonConverter CreateConverter(
31
31
return ( JsonConverter ) Activator . CreateInstance ( typeof ( KeyValuePairConverter < , > ) . MakeGenericType ( itemOneType , itemTwoType ) , _settings ) ;
32
32
}
33
33
34
- private class KeyValuePairConverter < TItem1 , TItem2 > : JsonConverter < KeyValuePair < TItem1 , TItem2 > > where TItem1 : class , IUrlParameter
34
+ private class KeyValuePairConverter < TItem1 , TItem2 > : JsonConverter < KeyValuePair < TItem1 , TItem2 > >
35
35
{
36
36
private readonly IElasticsearchClientSettings _settings ;
37
37
@@ -58,7 +58,16 @@ public override void Write(Utf8JsonWriter writer, KeyValuePair<TItem1, TItem2> v
58
58
JsonSerializerOptions options )
59
59
{
60
60
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
+
62
71
JsonSerializer . Serialize < TItem2 > ( writer , value . Value , options ) ;
63
72
writer . WriteEndObject ( ) ;
64
73
}
0 commit comments