Skip to content

Commit 5fcdb3c

Browse files
authored
Allow KeyValuePairConverter to work with non IUrlParameter keys (#8568)
1 parent 3bd035f commit 5fcdb3c

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/Elastic.Clients.Elasticsearch/_Shared/Serialization/KeyValuePairConverter.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
using System;
66
using System.Collections.Generic;
7-
using System.Reflection;
87
using System.Text.Json;
98
using System.Text.Json.Serialization;
9+
1010
using Elastic.Transport;
1111

1212
namespace 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

Comments
 (0)