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

IEnumerableWithAddMethodConverter<TCollection>

sealed class IEnumerableWithAddMethodConverter<TCollection> : IEnumerableDefaultConverter<TCollection, object> where TCollection : IEnumerable
using System.Collections; namespace System.Text.Json.Serialization.Converters { internal sealed class IEnumerableWithAddMethodConverter<TCollection> : IEnumerableDefaultConverter<TCollection, object> where TCollection : IEnumerable { private Action<TCollection, object> _addMethodDelegate; protected override void Add(object value, ref ReadStack state) { ((Action<TCollection, object>)state.Current.AddMethodDelegate)((TCollection)state.Current.ReturnValue, value); } protected override void CreateCollection(ref ReadStack state, JsonSerializerOptions options) { JsonClassInfo.ConstructorDelegate createObject = state.Current.JsonClassInfo.CreateObject; if (createObject == null) ThrowHelper.ThrowNotSupportedException_DeserializeNoParameterlessConstructor(TypeToConvert); state.Current.ReturnValue = createObject(); state.Current.AddMethodDelegate = GetAddMethodDelegate(options); } protected override bool OnWriteResume(Utf8JsonWriter writer, TCollection value, JsonSerializerOptions options, ref WriteStack state) { IEnumerator enumerator; if (state.Current.CollectionEnumerator == null) { enumerator = value.GetEnumerator(); if (!enumerator.MoveNext()) return true; } else enumerator = state.Current.CollectionEnumerator; JsonConverter<object> elementConverter = IEnumerableDefaultConverter<TCollection, object>.GetElementConverter(ref state); do { if (ShouldFlush(writer, ref state)) { state.Current.CollectionEnumerator = enumerator; return false; } if (!elementConverter.TryWrite(writer, enumerator.Current, options, ref state)) { state.Current.CollectionEnumerator = enumerator; return false; } } while (enumerator.MoveNext()); return true; } internal Action<TCollection, object> GetAddMethodDelegate(JsonSerializerOptions options) { if (_addMethodDelegate == null) _addMethodDelegate = options.MemberAccessorStrategy.CreateAddMethodDelegate<TCollection>(); return _addMethodDelegate; } } }