Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SmallObjectWithParameterizedConstructorConverter.cs
Go to the documentation of this file.
1
using
System.Collections.Generic
;
2
using
System.Text.Json.Serialization.Metadata
;
3
4
namespace
System.Text.Json.Serialization.Converters
;
5
6
internal
class
SmallObjectWithParameterizedConstructorConverter
<T, TArg0, TArg1, TArg2, TArg3> :
ObjectWithParameterizedConstructorConverter
<T>
7
{
8
protected
override
object
CreateObject
(
ref
ReadStackFrame
frame)
9
{
10
JsonTypeInfo
.ParameterizedConstructorDelegate<
T
, TArg0, TArg1, TArg2, TArg3>
parameterizedConstructorDelegate
= (
JsonTypeInfo
.ParameterizedConstructorDelegate<
T
, TArg0, TArg1, TArg2, TArg3>)frame.JsonTypeInfo.CreateObjectWithArgs;
11
Arguments<TArg0, TArg1, TArg2, TArg3>
arguments
= (
Arguments<TArg0, TArg1, TArg2, TArg3>
)frame.CtorArgumentState.Arguments;
12
return
parameterizedConstructorDelegate
(
arguments
.Arg0,
arguments
.Arg1,
arguments
.Arg2,
arguments
.Arg3);
13
}
14
15
protected
override
bool
ReadAndCacheConstructorArgument
(
ref
ReadStack
state
,
ref
Utf8JsonReader
reader,
JsonParameterInfo
jsonParameterInfo
)
16
{
17
Arguments<TArg0, TArg1, TArg2, TArg3>
arguments
= (
Arguments<TArg0, TArg1, TArg2, TArg3>
)
state
.Current.CtorArgumentState.Arguments;
18
return
jsonParameterInfo.ClrInfo.Position
switch
19
{
20
0 =>
TryRead<TArg0>
(
ref
state
,
ref
reader,
jsonParameterInfo
,
out
arguments
.Arg0),
21
1 =>
TryRead<TArg1>
(
ref
state
,
ref
reader,
jsonParameterInfo
,
out
arguments
.Arg1),
22
2 =>
TryRead<TArg2>
(
ref
state
,
ref
reader,
jsonParameterInfo
,
out
arguments
.Arg2),
23
3 =>
TryRead<TArg3>
(
ref
state
,
ref
reader,
jsonParameterInfo
,
out
arguments
.Arg3),
24
_
=>
throw
new
InvalidOperationException
(),
25
};
26
}
27
28
private
bool
TryRead<TArg>
(
ref
ReadStack
state
,
ref
Utf8JsonReader
reader,
JsonParameterInfo
jsonParameterInfo
,
out
TArg
arg
)
29
{
30
JsonParameterInfo<TArg>
jsonParameterInfo2
= (
JsonParameterInfo<TArg>
)
jsonParameterInfo
;
31
JsonConverter<TArg>
jsonConverter
= (
JsonConverter<TArg>
)
jsonParameterInfo
.ConverterBase;
32
TArg
value
;
33
bool
result =
jsonConverter
.TryRead(
ref
reader,
jsonParameterInfo2
.RuntimePropertyType,
jsonParameterInfo2
.Options,
ref
state
,
out
value
);
34
arg
= ((
value
==
null
&&
jsonParameterInfo
.IgnoreDefaultValuesOnRead) ? ((
TArg
)
jsonParameterInfo2
.DefaultValue) :
value
);
35
return
result;
36
}
37
38
protected
override
void
InitializeConstructorArgumentCaches
(
ref
ReadStack
state
,
JsonSerializerOptions
options
)
39
{
40
JsonTypeInfo
jsonTypeInfo
=
state
.Current.JsonTypeInfo;
41
if
(
jsonTypeInfo
.CreateObjectWithArgs ==
null
)
42
{
43
jsonTypeInfo.CreateObjectWithArgs
=
options
.MemberAccessorStrategy.CreateParameterizedConstructor<
T
, TArg0, TArg1, TArg2, TArg3>(
base
.ConstructorInfo);
44
}
45
Arguments<TArg0, TArg1, TArg2, TArg3>
arguments
=
new
Arguments<TArg0, TArg1, TArg2, TArg3>
();
46
List<KeyValuePair<string, JsonParameterInfo>
>
list
=
jsonTypeInfo
.ParameterCache.List;
47
for
(
int
i = 0; i <
jsonTypeInfo
.ParameterCount; i++)
48
{
49
JsonParameterInfo
value
=
list
[i].Value;
50
if
(
value
.ShouldDeserialize)
51
{
52
switch
(
value
.ClrInfo.Position)
53
{
54
case
0:
55
arguments.Arg0
= ((
JsonParameterInfo<TArg0>
)
value
).
TypedDefaultValue
;
56
break
;
57
case
1:
58
arguments.Arg1
= ((
JsonParameterInfo<TArg1>
)
value
).TypedDefaultValue;
59
break
;
60
case
2:
61
arguments.Arg2
= ((
JsonParameterInfo<TArg2>
)
value
).TypedDefaultValue;
62
break
;
63
case
3:
64
arguments.Arg3
= ((
JsonParameterInfo<TArg3>
)
value
).TypedDefaultValue;
65
break
;
66
default
:
67
throw
new
InvalidOperationException
();
68
}
69
}
70
}
71
state.Current.CtorArgumentState.Arguments
=
arguments
;
72
}
73
}
System.Collections.Generic.Dictionary
Definition
Dictionary.cs:14
System.InvalidOperationException
Definition
InvalidOperationException.cs:9
System.Text.Json.JsonSerializerOptions
Definition
JsonSerializerOptions.cs:17
System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter
Definition
ObjectWithParameterizedConstructorConverter.cs:10
System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter.CreateObject
override object CreateObject(ref ReadStackFrame frame)
Definition
SmallObjectWithParameterizedConstructorConverter.cs:8
System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter.TryRead< TArg >
bool TryRead< TArg >(ref ReadStack state, ref Utf8JsonReader reader, JsonParameterInfo jsonParameterInfo, out TArg arg)
Definition
SmallObjectWithParameterizedConstructorConverter.cs:28
System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter.InitializeConstructorArgumentCaches
override void InitializeConstructorArgumentCaches(ref ReadStack state, JsonSerializerOptions options)
Definition
SmallObjectWithParameterizedConstructorConverter.cs:38
System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter.ReadAndCacheConstructorArgument
override bool ReadAndCacheConstructorArgument(ref ReadStack state, ref Utf8JsonReader reader, JsonParameterInfo jsonParameterInfo)
Definition
SmallObjectWithParameterizedConstructorConverter.cs:15
System.Text.Json.Serialization.Converters.SmallObjectWithParameterizedConstructorConverter
Definition
SmallObjectWithParameterizedConstructorConverter.cs:7
System.Text.Json.Serialization.Metadata.JsonParameterInfo.TypedDefaultValue
T TypedDefaultValue
Definition
JsonParameterInfo.cs:86
System.Text.Json.Serialization.Metadata.JsonParameterInfo
Definition
JsonParameterInfo.cs:85
System.Text.Json.Serialization.Metadata.JsonTypeInfo
Definition
JsonTypeInfo.cs:14
System.Collections.Generic
Definition
IHashKeyCollection.cs:1
System.Text.Json.Serialization.Converters
Definition
ArrayConverter.cs:3
System.Text.Json.Serialization.Metadata
Definition
FSharpCoreReflectionProxy.cs:5
System.Text.Json.ConverterStrategy.Dictionary
@ Dictionary
System.ExceptionArgument.list
@ list
System.ExceptionArgument.value
@ value
System.ExceptionArgument.options
@ options
System.ExceptionArgument.state
@ state
System.ConsoleKey.T
@ T
System.Text.Json.ReadStackFrame
Definition
ReadStackFrame.cs:10
System.Text.Json.ReadStack
Definition
ReadStack.cs:12
System.Text.Json.Utf8JsonReader
Definition
Utf8JsonReader.cs:12
source
System.Text.Json
System.Text.Json.Serialization.Converters
SmallObjectWithParameterizedConstructorConverter.cs
Generated by
1.10.0