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

SmallObjectWithParameterizedConstructorConverter<T, TArg0, TArg1, TArg2, TArg3>

namespace System.Text.Json.Serialization.Converters { internal class SmallObjectWithParameterizedConstructorConverter<T, TArg0, TArg1, TArg2, TArg3> : ObjectWithParameterizedConstructorConverter<T> { protected override object CreateObject(ref ReadStackFrame frame) { JsonClassInfo.ParameterizedConstructorDelegate<T, TArg0, TArg1, TArg2, TArg3> parameterizedConstructorDelegate = (JsonClassInfo.ParameterizedConstructorDelegate<T, TArg0, TArg1, TArg2, TArg3>)frame.JsonClassInfo.CreateObjectWithArgs; Arguments<TArg0, TArg1, TArg2, TArg3> arguments = (Arguments<TArg0, TArg1, TArg2, TArg3>)frame.CtorArgumentState.Arguments; return parameterizedConstructorDelegate(arguments.Arg0, arguments.Arg1, arguments.Arg2, arguments.Arg3); } protected override bool ReadAndCacheConstructorArgument(ref ReadStack state, ref Utf8JsonReader reader, JsonParameterInfo jsonParameterInfo) { Arguments<TArg0, TArg1, TArg2, TArg3> arguments = (Arguments<TArg0, TArg1, TArg2, TArg3>)state.Current.CtorArgumentState.Arguments; bool flag; switch (jsonParameterInfo.Position) { case 0: flag = ((JsonParameterInfo<TArg0>)jsonParameterInfo).ReadJsonTyped(ref state, ref reader, out TArg0 value4); if (flag) arguments.Arg0 = value4; break; case 1: flag = ((JsonParameterInfo<TArg1>)jsonParameterInfo).ReadJsonTyped(ref state, ref reader, out TArg1 value2); if (flag) arguments.Arg1 = value2; break; case 2: flag = ((JsonParameterInfo<TArg2>)jsonParameterInfo).ReadJsonTyped(ref state, ref reader, out TArg2 value3); if (flag) arguments.Arg2 = value3; break; case 3: flag = ((JsonParameterInfo<TArg3>)jsonParameterInfo).ReadJsonTyped(ref state, ref reader, out TArg3 value); if (flag) arguments.Arg3 = value; break; default: throw new InvalidOperationException(); } return flag; } protected override void InitializeConstructorArgumentCaches(ref ReadStack state, JsonSerializerOptions options) { JsonClassInfo jsonClassInfo = state.Current.JsonClassInfo; if (jsonClassInfo.CreateObjectWithArgs == null) jsonClassInfo.CreateObjectWithArgs = options.MemberAccessorStrategy.CreateParameterizedConstructor<T, TArg0, TArg1, TArg2, TArg3>(base.ConstructorInfo); Arguments<TArg0, TArg1, TArg2, TArg3> arguments = new Arguments<TArg0, TArg1, TArg2, TArg3>(); foreach (JsonParameterInfo value in jsonClassInfo.ParameterCache.Values) { if (value.ShouldDeserialize) { switch (value.Position) { case 0: arguments.Arg0 = ((JsonParameterInfo<TArg0>)value).TypedDefaultValue; break; case 1: arguments.Arg1 = ((JsonParameterInfo<TArg1>)value).TypedDefaultValue; break; case 2: arguments.Arg2 = ((JsonParameterInfo<TArg2>)value).TypedDefaultValue; break; case 3: arguments.Arg3 = ((JsonParameterInfo<TArg3>)value).TypedDefaultValue; break; default: throw new InvalidOperationException(); } } } state.Current.CtorArgumentState.Arguments = arguments; } } }