SmallObjectWithParameterizedConstructorConverter<T, TArg0, TArg1, TArg2, TArg3>
class SmallObjectWithParameterizedConstructorConverter<T, TArg0, TArg1, TArg2, TArg3> : ObjectWithParameterizedConstructorConverter<T>
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;
}
}
}