public static async Task SerializeAsync(Stream stream, IEnumerable <Document> documents, CancellationToken cancellationToken = default) { using var buffer = new PooledByteBufferWriter(stream); // ReSharper disable once UseAwaitUsing using var writer = new Utf8JsonWriter(buffer); writer.WriteStartArray(); foreach (var document in documents) { writer.WriteStartObject(); foreach (var(key, attributeValue) in document) { writer.WritePropertyName(key); WriteAttributeValue(buffer, writer, in attributeValue); if (buffer.ShouldFlush(writer)) { await buffer.FlushAsync(writer, cancellationToken).ConfigureAwait(false); } } writer.WriteEndObject(); } writer.WriteEndArray(); await buffer.FlushAsync(writer, cancellationToken).ConfigureAwait(false); }
private async ValueTask WriteValueAsync(Utf8JsonWriter writer, PooledByteBufferWriter bufferWriter, StringAttributeValue attributeValue) { writer.WriteStringValue(attributeValue.Value); if (bufferWriter.ShouldFlush(writer)) { await bufferWriter.FlushAsync(writer).ConfigureAwait(false); } }
private void WriteValue(Utf8JsonWriter writer, PooledByteBufferWriter bufferWriter, StringAttributeValue attributeValue) { writer.WriteStringValue(attributeValue.Value); if (bufferWriter.ShouldFlush(writer)) { bufferWriter.FlushAsync(writer); } }