Skip to content

Commit face910

Browse files
Fix serialisation of empty and single item Fields instances (#8018) (#8026)
Co-authored-by: Steve Gordon <[email protected]>
1 parent 0bd1b15 commit face910

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/Elastic.Clients.Elasticsearch.Shared/Core/Infer/Fields/Fields.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public sealed class Fields : IUrlParameter, IEnumerable<Field>, IEquatable<Field
2727

2828
internal Fields() => ListOfFields = new List<Field>();
2929

30-
internal Fields(IEnumerable<Field> fieldNames) => ListOfFields = fieldNames.ToList();
30+
internal Fields(IEnumerable<Field> fieldNames) => ListOfFields = new List<Field>(fieldNames);
3131

3232
private string DebugDisplay =>
3333
$"Count: {ListOfFields.Count} [" +

src/Elastic.Clients.Elasticsearch.Shared/Core/Infer/Fields/FieldsConverter.cs

+15-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ internal sealed class FieldsConverter : JsonConverter<Fields>
2222
Fields fields = reader.GetString();
2323
return fields;
2424
}
25-
else if (reader.TokenType == JsonTokenType.StartArray)
25+
26+
if (reader.TokenType == JsonTokenType.StartArray)
2627
{
2728
var fields = new List<Field>();
2829
while (reader.Read() && reader.TokenType != JsonTokenType.EndArray)
@@ -45,6 +46,19 @@ public override void Write(Utf8JsonWriter writer, Fields value, JsonSerializerOp
4546
return;
4647
}
4748

49+
if (value.ListOfFields.Count == 0)
50+
{
51+
writer.WriteStartObject();
52+
writer.WriteEndObject();
53+
return;
54+
}
55+
56+
if (value.ListOfFields.Count == 1)
57+
{
58+
JsonSerializer.Serialize(writer, value.ListOfFields[0], options);
59+
return;
60+
}
61+
4862
writer.WriteStartArray();
4963
foreach (var field in value.ListOfFields)
5064
{

0 commit comments

Comments
 (0)