Skip to content

Commit 6c13d40

Browse files
authored
Avoid double emeration for SingleOrMany serialization (#6538)
1 parent 9214966 commit 6c13d40

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

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

+15-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,21 @@ public static IEnumerable<TItem> Deserialize<TItem>(ref Utf8JsonReader reader, J
4747

4848
public static void Serialize<TItem>(IEnumerable<TItem> value, Utf8JsonWriter writer, JsonSerializerOptions options)
4949
{
50-
// TODO - Optimise to avoid the count
51-
var count = value.Count();
50+
if (value is not ICollection<TItem> collection)
51+
{
52+
// Avoid a double enumeration of counting then iterating.
53+
// Instead, produce an array, even if it's an array of one.
54+
55+
writer.WriteStartArray();
56+
foreach (var item in value)
57+
{
58+
JsonSerializer.Serialize<TItem>(writer, item, options);
59+
}
60+
writer.WriteEndArray();
61+
return;
62+
}
63+
64+
var count = collection.Count;
5265

5366
if (count == 0)
5467
{

0 commit comments

Comments
 (0)