Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ObjectDefaultConverter.cs
Go to the documentation of this file.
5
7
9{
10 internal override bool CanHaveIdMetadata => true;
11
13 {
14 JsonTypeInfo jsonTypeInfo = state.Current.JsonTypeInfo;
15 object obj;
16 if (state.UseFastPath)
17 {
18 if (reader.TokenType != JsonTokenType.StartObject)
19 {
21 }
22 if (jsonTypeInfo.CreateObject == null)
23 {
25 }
26 obj = jsonTypeInfo.CreateObject();
28 {
29 jsonOnDeserializing.OnDeserializing();
30 }
31 while (true)
32 {
33 reader.ReadWithVerify();
34 JsonTokenType tokenType = reader.TokenType;
35 if (tokenType == JsonTokenType.EndObject)
36 {
37 break;
38 }
43 }
44 }
45 else
46 {
47 if (state.Current.ObjectState == StackFrameObjectState.None)
48 {
49 if (reader.TokenType != JsonTokenType.StartObject)
50 {
52 }
54 }
55 if ((int)state.Current.ObjectState < 14 && options.ReferenceHandlingStrategy == ReferenceHandlingStrategy.Preserve)
56 {
57 if (!JsonSerializer.ResolveMetadataForJsonObject<T>(ref reader, ref state, options))
58 {
59 value = default(T);
60 return false;
61 }
62 if (state.Current.ObjectState == StackFrameObjectState.ReadRefEndObject)
63 {
64 value = (T)state.Current.ReturnValue;
65 return true;
66 }
67 }
68 if ((int)state.Current.ObjectState < 15)
69 {
70 if (jsonTypeInfo.CreateObject == null)
71 {
73 }
74 obj = jsonTypeInfo.CreateObject();
76 {
77 jsonOnDeserializing2.OnDeserializing();
78 }
81 }
82 else
83 {
84 obj = state.Current.ReturnValue;
85 }
86 while (true)
87 {
88 if (state.Current.PropertyState == StackFramePropertyState.None)
89 {
91 if (!reader.Read())
92 {
94 value = default(T);
95 return false;
96 }
97 }
99 if ((int)state.Current.PropertyState < 2)
100 {
102 JsonTokenType tokenType2 = reader.TokenType;
103 if (tokenType2 == JsonTokenType.EndObject)
104 {
105 break;
106 }
110 }
111 else
112 {
113 jsonPropertyInfo2 = state.Current.JsonPropertyInfo;
114 }
115 if ((int)state.Current.PropertyState < 3)
116 {
117 if (!jsonPropertyInfo2.ShouldDeserialize)
118 {
119 if (!reader.TrySkip())
120 {
122 value = default(T);
123 return false;
124 }
125 state.Current.EndProperty();
126 continue;
127 }
129 {
131 value = default(T);
132 return false;
133 }
134 }
135 if ((int)state.Current.PropertyState >= 5)
136 {
137 continue;
138 }
139 if (!state.Current.UseExtensionProperty)
140 {
141 if (!jsonPropertyInfo2.ReadJsonAndSetMember(obj, ref state, ref reader))
142 {
144 value = default(T);
145 return false;
146 }
147 }
148 else if (!jsonPropertyInfo2.ReadJsonAndAddExtensionProperty(obj, ref state, ref reader))
149 {
151 value = default(T);
152 return false;
153 }
154 state.Current.EndProperty();
155 }
156 }
158 {
159 jsonOnDeserialized.OnDeserialized();
160 }
161 value = (T)obj;
162 if (state.Current.PropertyRefCache != null)
163 {
164 jsonTypeInfo.UpdateSortedPropertyCache(ref state.Current);
165 }
166 return true;
167 }
168
170 {
171 JsonTypeInfo jsonTypeInfo = state.Current.JsonTypeInfo;
172 object obj = value;
173 if (!state.SupportContinuation)
174 {
175 writer.WriteStartObject();
176 if (options.ReferenceHandlingStrategy == ReferenceHandlingStrategy.Preserve && JsonSerializer.WriteReferenceForObject(this, obj, ref state, writer) == MetadataPropertyName.Ref)
177 {
178 return true;
179 }
181 {
182 jsonOnSerializing.OnSerializing();
183 }
185 for (int i = 0; i < list.Count; i++)
186 {
187 JsonPropertyInfo value2 = list[i].Value;
188 if (value2.ShouldSerialize)
189 {
191 state.Current.NumberHandling = value2.NumberHandling;
192 bool memberAndWriteJson = value2.GetMemberAndWriteJson(obj, ref state, writer);
193 state.Current.EndProperty();
194 }
195 }
197 if (dataExtensionProperty != null && dataExtensionProperty.ShouldSerialize)
198 {
201 bool memberAndWriteJsonExtensionData = dataExtensionProperty.GetMemberAndWriteJsonExtensionData(obj, ref state, writer);
202 state.Current.EndProperty();
203 }
204 writer.WriteEndObject();
205 }
206 else
207 {
208 if (!state.Current.ProcessedStartToken)
209 {
210 writer.WriteStartObject();
211 if (options.ReferenceHandlingStrategy == ReferenceHandlingStrategy.Preserve && JsonSerializer.WriteReferenceForObject(this, obj, ref state, writer) == MetadataPropertyName.Ref)
212 {
213 return true;
214 }
216 {
217 jsonOnSerializing2.OnSerializing();
218 }
220 }
222 while (state.Current.EnumeratorIndex < list2.Count)
223 {
224 JsonPropertyInfo value3 = list2[state.Current.EnumeratorIndex].Value;
225 if (value3.ShouldSerialize)
226 {
228 state.Current.NumberHandling = value3.NumberHandling;
229 if (!value3.GetMemberAndWriteJson(obj, ref state, writer))
230 {
231 return false;
232 }
233 state.Current.EndProperty();
234 state.Current.EnumeratorIndex++;
235 if (ShouldFlush(writer, ref state))
236 {
237 return false;
238 }
239 }
240 else
241 {
242 state.Current.EnumeratorIndex++;
243 }
244 }
245 if (state.Current.EnumeratorIndex == list2.Count)
246 {
248 if (dataExtensionProperty2 != null && dataExtensionProperty2.ShouldSerialize)
249 {
252 if (!dataExtensionProperty2.GetMemberAndWriteJsonExtensionData(obj, ref state, writer))
253 {
254 return false;
255 }
256 state.Current.EndProperty();
257 state.Current.EnumeratorIndex++;
258 if (ShouldFlush(writer, ref state))
259 {
260 return false;
261 }
262 }
263 else
264 {
265 state.Current.EnumeratorIndex++;
266 }
267 }
268 if (!state.Current.ProcessedEndToken)
269 {
271 writer.WriteEndObject();
272 }
273 }
275 {
276 jsonOnSerialized.OnSerialized();
277 }
278 value = (T)obj;
279 return true;
280 }
281
282 [MethodImpl(MethodImplOptions.AggressiveInlining)]
284 {
285 if (!jsonPropertyInfo.ShouldDeserialize)
286 {
287 reader.Skip();
288 }
289 else
290 {
291 reader.ReadWithVerify();
293 {
294 jsonPropertyInfo.ReadJsonAndSetMember(obj, ref state, ref reader);
295 }
296 else
297 {
298 jsonPropertyInfo.ReadJsonAndAddExtensionProperty(obj, ref state, ref reader);
299 }
300 }
301 state.Current.EndProperty();
302 }
303
305 {
307 if (!state.Current.UseExtensionProperty)
308 {
309 if (!JsonConverter.SingleValueReadWithReadAhead(jsonPropertyInfo.ConverterBase.ConverterStrategy, ref reader, ref state))
310 {
311 return false;
312 }
313 }
315 {
316 return false;
317 }
318 return true;
319 }
320
322 {
323 if (state.Current.JsonTypeInfo.CreateObject == null)
324 {
326 }
327 object obj = state.Current.JsonTypeInfo.CreateObject();
330 {
331 jsonOnDeserializing.OnDeserializing();
332 }
333 }
334}
static JsonPropertyInfo LookupProperty(object obj, ReadOnlySpan< byte > unescapedPropertyName, ref ReadStack state, JsonSerializerOptions options, out bool useExtensionProperty, bool createExtensionProperty=true)
static ReadOnlySpan< byte > GetPropertyName(ref ReadStack state, ref Utf8JsonReader reader, JsonSerializerOptions options)
static MetadataPropertyName WriteReferenceForObject(JsonConverter jsonConverter, object currentValue, ref WriteStack state, Utf8JsonWriter writer)
override void CreateInstanceForReferenceResolver(ref Utf8JsonReader reader, ref ReadStack state, JsonSerializerOptions options)
static bool ReadAheadPropertyValue(ref ReadStack state, ref Utf8JsonReader reader, JsonPropertyInfo jsonPropertyInfo)
static void ReadPropertyValue(object obj, ref ReadStack state, ref Utf8JsonReader reader, JsonPropertyInfo jsonPropertyInfo, bool useExtensionProperty)
override bool OnTryWrite(Utf8JsonWriter writer, T value, JsonSerializerOptions options, ref WriteStack state)
override bool OnTryRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options, ref ReadStack state, [MaybeNullWhen(false)] out T value)
static bool SingleValueReadWithReadAhead(ConverterStrategy converterStrategy, ref Utf8JsonReader reader, ref ReadStack state)
static void ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
static void ThrowNotSupportedException_DeserializeNoConstructor(Type type, ref Utf8JsonReader reader, ref ReadStack state)