Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ OnTryRead()

override bool System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >.OnTryRead ( ref Utf8JsonReader reader,
Type typeToConvert,
JsonSerializerOptions options,
ref ReadStack state,
[MaybeNullWhen(false)] out TDictionary value )
inlinesealedpackageinherited

Definition at line 37 of file JsonDictionaryConverter.cs.

38 {
39 JsonTypeInfo elementTypeInfo = state.Current.JsonTypeInfo.ElementTypeInfo;
40 if (state.UseFastPath)
41 {
42 if (reader.TokenType != JsonTokenType.StartObject)
43 {
44 ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(TypeToConvert);
45 }
47 if (_valueConverter == null)
48 {
50 }
51 if (_valueConverter.CanUseDirectReadOrWrite && !state.Current.NumberHandling.HasValue)
52 {
53 while (true)
54 {
55 reader.ReadWithVerify();
56 if (reader.TokenType == JsonTokenType.EndObject)
57 {
58 break;
59 }
60 TKey key = ReadDictionaryKey(ref reader, ref state);
61 reader.ReadWithVerify();
64 }
65 }
66 else
67 {
68 while (true)
69 {
70 reader.ReadWithVerify();
71 if (reader.TokenType == JsonTokenType.EndObject)
72 {
73 break;
74 }
75 TKey key2 = ReadDictionaryKey(ref reader, ref state);
76 reader.ReadWithVerify();
79 }
80 }
81 }
82 else
83 {
84 if (state.Current.ObjectState == StackFrameObjectState.None)
85 {
86 if (reader.TokenType != JsonTokenType.StartObject)
87 {
88 ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(TypeToConvert);
89 }
90 state.Current.ObjectState = StackFrameObjectState.StartToken;
91 }
92 bool flag = options.ReferenceHandlingStrategy == ReferenceHandlingStrategy.Preserve;
93 if (flag && (int)state.Current.ObjectState < 14)
94 {
95 if (!JsonSerializer.ResolveMetadataForJsonObject<TDictionary>(ref reader, ref state, options))
96 {
97 value = default(TDictionary);
98 return false;
99 }
100 if (state.Current.ObjectState == StackFrameObjectState.ReadRefEndObject)
101 {
102 value = (TDictionary)state.Current.ReturnValue;
103 return true;
104 }
105 }
106 if ((int)state.Current.ObjectState < 15)
107 {
108 CreateCollection(ref reader, ref state);
109 state.Current.ObjectState = StackFrameObjectState.CreatedObject;
110 }
111 if (_valueConverter == null)
112 {
114 }
115 while (true)
116 {
117 if (state.Current.PropertyState == StackFramePropertyState.None)
118 {
119 state.Current.PropertyState = StackFramePropertyState.ReadName;
120 if (!reader.Read())
121 {
122 value = default(TDictionary);
123 return false;
124 }
125 }
126 TKey val;
127 if ((int)state.Current.PropertyState < 2)
128 {
129 if (reader.TokenType == JsonTokenType.EndObject)
130 {
131 break;
132 }
133 state.Current.PropertyState = StackFramePropertyState.Name;
134 if (flag)
135 {
136 ReadOnlySpan<byte> span = reader.GetSpan();
137 if (span.Length > 0 && span[0] == 36)
138 {
139 ThrowHelper.ThrowUnexpectedMetadataException(span, ref reader, ref state);
140 }
141 }
142 val = ReadDictionaryKey(ref reader, ref state);
143 }
144 else
145 {
146 val = (TKey)state.Current.DictionaryKey;
147 }
148 if ((int)state.Current.PropertyState < 3)
149 {
150 state.Current.PropertyState = StackFramePropertyState.ReadValue;
151 if (!JsonConverter.SingleValueReadWithReadAhead(_valueConverter.ConverterStrategy, ref reader, ref state))
152 {
154 value = default(TDictionary);
155 return false;
156 }
157 }
158 if ((int)state.Current.PropertyState < 5)
159 {
160 if (!_valueConverter.TryRead(ref reader, typeof(TValue), options, ref state, out var value4))
161 {
163 value = default(TDictionary);
164 return false;
165 }
166 Add(val, in value4, options, ref state);
167 state.Current.EndElement();
168 }
169 }
170 }
172 value = (TDictionary)state.Current.ReturnValue;
173 return true;
174 TKey ReadDictionaryKey(ref Utf8JsonReader reader, ref ReadStack state)
175 {
176 if (_keyConverter == null)
177 {
178 _keyConverter = GetConverter<TKey>(state.Current.JsonTypeInfo.KeyTypeInfo);
179 }
180 string @string;
181 TKey result;
183 {
184 @string = reader.GetString();
185 result = (TKey)(object)@string;
186 }
187 else
188 {
190 @string = reader.GetString();
191 }
193 return result;
194 }
195 }
virtual T ReadAsPropertyNameCore(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
bool TryRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, ref ReadStack state, out T value)
T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
virtual void ConvertCollection(ref ReadStack state, JsonSerializerOptions options)
virtual void CreateCollection(ref Utf8JsonReader reader, ref ReadStack state)
JsonTypeInfo(Type type, JsonSerializerOptions options)

References System.Text.Json.Serialization.Metadata.JsonTypeInfo< T >.JsonTypeInfo(), System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >._keyConverter, System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >._valueConverter, System.Add, System.Text.Json.Serialization.JsonConverter< T >.CanUseDirectReadOrWrite, System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >.ConvertCollection(), System.Text.Json.Serialization.JsonConverter< T >.ConverterStrategy, System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >.CreateCollection(), System.Text.Json.Dictionary, System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >.ElementType, System.Text.Json.Serialization.JsonConverter< T >.IsInternalConverter, System.key, System.Text.Json.Serialization.JsonDictionaryConverter< TDictionary, TKey, TValue >.KeyType, System.options, System.Text.Json.Serialization.JsonConverter< T >.Read(), System.Text.Json.Serialization.JsonConverter< T >.ReadAsPropertyNameCore(), System.Text.Json.Serialization.JsonConverter< T >.SingleValueReadWithReadAhead(), System.state, System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(), System.Text.Json.ThrowHelper.ThrowUnexpectedMetadataException(), System.Text.Json.Serialization.JsonConverter< T >.TryRead(), and System.value.