<PackageReference Include="System.Text.Json" Version="5.0.0-preview.2.20160.6" />

ImmutableEnumerableOfTConverter<TCollection, TElement>

sealed class ImmutableEnumerableOfTConverter<TCollection, TElement> : IEnumerableDefaultConverter<TCollection, TElement> where TCollection : IEnumerable<TElement>
using System.Collections.Generic; namespace System.Text.Json.Serialization.Converters { internal sealed class ImmutableEnumerableOfTConverter<TCollection, TElement> : IEnumerableDefaultConverter<TCollection, TElement> where TCollection : IEnumerable<TElement> { private Func<IEnumerable<TElement>, TCollection> _creatorDelegate; internal override bool CanHaveIdMetadata => false; protected override void Add(TElement value, ref ReadStack state) { ((List<TElement>)state.Current.ReturnValue).Add(value); } protected override void CreateCollection(ref ReadStack state, JsonSerializerOptions options) { state.Current.ReturnValue = new List<TElement>(); } protected override void ConvertCollection(ref ReadStack state, JsonSerializerOptions options) { state.Current.ReturnValue = GetCreatorDelegate(options)((List<TElement>)state.Current.ReturnValue); } protected override bool OnWriteResume(Utf8JsonWriter writer, TCollection value, JsonSerializerOptions options, ref WriteStack state) { IEnumerator<TElement> enumerator; if (state.Current.CollectionEnumerator == null) { enumerator = value.GetEnumerator(); if (!enumerator.MoveNext()) return true; } else enumerator = (IEnumerator<TElement>)state.Current.CollectionEnumerator; JsonConverter<TElement> elementConverter = IEnumerableDefaultConverter<TCollection, TElement>.GetElementConverter(ref state); do { if (ShouldFlush(writer, ref state)) { state.Current.CollectionEnumerator = enumerator; return false; } TElement current = enumerator.Current; if (!elementConverter.TryWrite(writer, current, options, ref state)) { state.Current.CollectionEnumerator = enumerator; return false; } } while (enumerator.MoveNext()); return true; } private Func<IEnumerable<TElement>, TCollection> GetCreatorDelegate(JsonSerializerOptions options) { if (_creatorDelegate == null) _creatorDelegate = options.MemberAccessorStrategy.CreateImmutableEnumerableCreateRangeDelegate<TElement, TCollection>(); return _creatorDelegate; } } }