From 3686714dd129179dd6be1dee63dd0203bf192a14 Mon Sep 17 00:00:00 2001 From: Yoh Deadfall Date: Tue, 23 May 2023 21:51:23 +0300 Subject: [PATCH 1/3] Complted buckets JSON deserialization --- .../Serialization/UnionConverter.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs index 20019610188..d14a3bc72a0 100644 --- a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs @@ -214,13 +214,13 @@ private class BucketsConverter : JsonConverter> { public override Buckets? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - // TODO - Read ahead to establish the type - For now, hardcoded for lists - - var bucketType = typeToConvert.GetGenericArguments()[0]; - - var item = JsonSerializer.Deserialize(ref reader, typeof(IReadOnlyCollection), options); - - return (Buckets)Activator.CreateInstance(typeof(Buckets<>).MakeGenericType(bucketType), item); + return reader.TokenType switch + { + JsonTokenType.Null => null, + JsonTokenType.StartArray => new(JsonSerializer.Deserialize>(ref reader, options)), + JsonTokenType.StartObject => new(JsonSerializer.Deserialize>(ref reader, options)), + _ => throw new JsonException("Invalid bucket type") + }; } public override void Write(Utf8JsonWriter writer, Buckets value, JsonSerializerOptions options) => throw new NotImplementedException(); From 0b57c690b41ab964d553302a50946496b095f2bc Mon Sep 17 00:00:00 2001 From: Yoh Deadfall Date: Tue, 23 May 2023 22:22:09 +0300 Subject: [PATCH 2/3] Implemented buckets serialization --- .../Serialization/UnionConverter.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs index d14a3bc72a0..07979c7faf4 100644 --- a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs @@ -223,6 +223,21 @@ private class BucketsConverter : JsonConverter> }; } - public override void Write(Utf8JsonWriter writer, Buckets value, JsonSerializerOptions options) => throw new NotImplementedException(); + public override void Write(Utf8JsonWriter writer, Buckets value, JsonSerializerOptions options) + { + if (value.Item1 is { } item1) + { + JsonSerializer.Serialize(writer, item1, options); + return; + } + + if (value.Item2 is { } item2) + { + JsonSerializer.Serialize(writer, item2, options); + return; + } + + writer.WriteNullValue(); + } } } From 484250f159d6ec64b4917069bf39e1800e4b580c Mon Sep 17 00:00:00 2001 From: Yoh Deadfall Date: Tue, 23 May 2023 22:41:31 +0300 Subject: [PATCH 3/3] Removed dead code --- .../Serialization/UnionConverter.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs index 07979c7faf4..9908f3013fc 100644 --- a/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs +++ b/src/Elastic.Clients.Elasticsearch/Serialization/UnionConverter.cs @@ -122,12 +122,6 @@ private class DerivedUnionConverterInner : JsonConverter< public override void Write(Utf8JsonWriter writer, TType value, JsonSerializerOptions options) { - if (value is null) - { - writer.WriteNullValue(); - return; - } - if (value.Item1 is not null) { JsonSerializer.Serialize(writer, value.Item1, value.Item1.GetType(), options);