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

RootLevelListConverter<T>

using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Text.Json.Serialization.Metadata; namespace System.Text.Json.Serialization.Converters { internal sealed class RootLevelListConverter<T> : JsonResumableConverter<List<T>> { private readonly JsonTypeInfo<T> _elementTypeInfo; internal override Type ElementType => typeof(T); private protected sealed override ConverterStrategy GetDefaultConverterStrategy() { return ConverterStrategy.Enumerable; } public RootLevelListConverter(JsonTypeInfo<T> elementTypeInfo) { base.IsRootLevelMultiContentStreamingConverter = true; _elementTypeInfo = elementTypeInfo; } internal override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, [System.Runtime.CompilerServices.ScopedRef] ref ReadStack state, out List<T> value) { JsonConverter<T> effectiveConverter = _elementTypeInfo.EffectiveConverter; state.Current.JsonPropertyInfo = _elementTypeInfo.PropertyInfoForTypeInfo; List<T> list = (List<T>)state.Current.ReturnValue; while (true) { if ((int)state.Current.PropertyState < 3) { if (!ref reader.TryAdvanceToNextRootLevelValueWithOptionalReadAhead(effectiveConverter.RequiresReadAhead, out bool isAtEndOfStream)) { if (isAtEndOfStream) { value = list; return true; } value = null; return false; } state.Current.PropertyState = StackFramePropertyState.ReadValue; } if (!effectiveConverter.TryRead(ref reader, typeof(T), options, ref state, out T value2, out bool _)) break; if (list == null) list = (List<T>)(state.Current.ReturnValue = new List<T>()); list.Add(value2); state.Current.EndElement(); } value = null; return false; } } }