Skip to content

Commit 5732df0

Browse files
authored
Complted buckets JSON converter (#7738)
1 parent 80ca069 commit 5732df0

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs

+21-12
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,6 @@ private class DerivedUnionConverterInner<TType, TItem1, TItem2> : JsonConverter<
122122
public override void Write(Utf8JsonWriter writer, TType value,
123123
JsonSerializerOptions options)
124124
{
125-
if (value is null)
126-
{
127-
writer.WriteNullValue();
128-
return;
129-
}
130-
131125
if (value.Item1 is not null)
132126
{
133127
JsonSerializer.Serialize(writer, value.Item1, value.Item1.GetType(), options);
@@ -214,15 +208,30 @@ private class BucketsConverter<TBucket> : JsonConverter<Buckets<TBucket>>
214208
{
215209
public override Buckets<TBucket>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
216210
{
217-
// TODO - Read ahead to establish the type - For now, hardcoded for lists
211+
return reader.TokenType switch
212+
{
213+
JsonTokenType.Null => null,
214+
JsonTokenType.StartArray => new(JsonSerializer.Deserialize<IReadOnlyCollection<TBucket>>(ref reader, options)),
215+
JsonTokenType.StartObject => new(JsonSerializer.Deserialize<IReadOnlyDictionary<string, TBucket>>(ref reader, options)),
216+
_ => throw new JsonException("Invalid bucket type")
217+
};
218+
}
218219

219-
var bucketType = typeToConvert.GetGenericArguments()[0];
220+
public override void Write(Utf8JsonWriter writer, Buckets<TBucket> value, JsonSerializerOptions options)
221+
{
222+
if (value.Item1 is { } item1)
223+
{
224+
JsonSerializer.Serialize(writer, item1, options);
225+
return;
226+
}
220227

221-
var item = JsonSerializer.Deserialize(ref reader, typeof(IReadOnlyCollection<TBucket>), options);
228+
if (value.Item2 is { } item2)
229+
{
230+
JsonSerializer.Serialize(writer, item2, options);
231+
return;
232+
}
222233

223-
return (Buckets<TBucket>)Activator.CreateInstance(typeof(Buckets<>).MakeGenericType(bucketType), item);
234+
writer.WriteNullValue();
224235
}
225-
226-
public override void Write(Utf8JsonWriter writer, Buckets<TBucket> value, JsonSerializerOptions options) => throw new NotImplementedException();
227236
}
228237
}

0 commit comments

Comments
 (0)