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

LargeObjectWithParameterizedConstructorConverter<T>

using System.Buffers; namespace System.Text.Json.Serialization.Converters { internal sealed class LargeObjectWithParameterizedConstructorConverter<T> : ObjectWithParameterizedConstructorConverter<T> { protected override bool ReadAndCacheConstructorArgument(ref ReadStack state, ref Utf8JsonReader reader, JsonParameterInfo jsonParameterInfo) { object argument; bool flag = jsonParameterInfo.ReadJson(ref state, ref reader, out argument); if (flag) ((object[])state.Current.CtorArgumentState.Arguments)[jsonParameterInfo.Position] = argument; return flag; } protected override object CreateObject(ref ReadStackFrame frame) { object[] array = (object[])frame.CtorArgumentState.Arguments; JsonClassInfo.ParameterizedConstructorDelegate<T> parameterizedConstructorDelegate = (JsonClassInfo.ParameterizedConstructorDelegate<T>)frame.JsonClassInfo.CreateObjectWithParameterizedCtor; if (parameterizedConstructorDelegate == null) ThrowHelper.ThrowNotSupportedException_ConstructorMaxOf64Parameters(base.ConstructorInfo, TypeToConvert); object result = parameterizedConstructorDelegate(array); ArrayPool<object>.Shared.Return(array, true); return result; } protected override void InitializeConstructorArgumentCaches(ref ReadStack state, JsonSerializerOptions options) { JsonClassInfo jsonClassInfo = state.Current.JsonClassInfo; if (jsonClassInfo.CreateObjectWithParameterizedCtor == null) jsonClassInfo.CreateObjectWithParameterizedCtor = options.MemberAccessorStrategy.CreateParameterizedConstructor<T>(base.ConstructorInfo); object[] array = ArrayPool<object>.Shared.Rent(jsonClassInfo.ParameterCount); foreach (JsonParameterInfo value in jsonClassInfo.ParameterCache.Values) { if (value.ShouldDeserialize) array[value.Position] = value.DefaultValue; } state.Current.CtorArgumentState.Arguments = array; } } }