<PackageReference Include="System.Text.Json" Version="10.0.0-preview.1.25080.5" />

MemoryConverter<T>

using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace System.Text.Json.Serialization.Converters { internal sealed class MemoryConverter<T> : JsonCollectionConverter<Memory<T>, T> { internal override bool CanHaveMetadata => false; public override bool HandleNull => true; internal sealed override bool IsConvertibleCollection => true; internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, [System.Runtime.CompilerServices.ScopedRef] ref ReadStack state, out Memory<T> value) { if (reader.TokenType == JsonTokenType.Null) { value = default(Memory<T>); return true; } return base.OnTryRead(ref reader, typeToConvert, options, ref state, out value); } protected override void Add([In] [System.Runtime.CompilerServices.IsReadOnly] T value, ref ReadStack state) { ((List<T>)state.Current.ReturnValue).Add(value); } protected override void CreateCollection(ref Utf8JsonReader reader, [System.Runtime.CompilerServices.ScopedRef] ref ReadStack state, JsonSerializerOptions options) { state.Current.ReturnValue = new List<T>(); } protected override void ConvertCollection(ref ReadStack state, JsonSerializerOptions options) { Memory<T> memory = MemoryExtensions.AsMemory<T>(((List<T>)state.Current.ReturnValue).ToArray()); state.Current.ReturnValue = memory; } protected override bool OnWriteResume(Utf8JsonWriter writer, Memory<T> value, JsonSerializerOptions options, ref WriteStack state) { return ReadOnlyMemoryConverter<T>.OnWriteResume(writer, value.Span, options, ref state); } } }