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

◆ ResolveMetadataForJsonObject< T >()

static bool System.Text.Json.JsonSerializer.ResolveMetadataForJsonObject< T > ( ref Utf8JsonReader reader,
ref ReadStack state,
JsonSerializerOptions options )
inlinestaticpackage

Definition at line 400 of file JsonSerializer.cs.

401 {
402 JsonConverter converterBase = state.Current.JsonTypeInfo.PropertyInfoForTypeInfo.ConverterBase;
403 if ((int)state.Current.ObjectState < 2 && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadNameOrEndObject))
404 {
405 return false;
406 }
407 if (state.Current.ObjectState == StackFrameObjectState.ReadNameOrEndObject)
408 {
409 if (reader.TokenType != JsonTokenType.PropertyName)
410 {
411 state.Current.ObjectState = StackFrameObjectState.PropertyValue;
412 state.Current.PropertyState = StackFramePropertyState.ReadName;
413 return true;
414 }
415 ReadOnlySpan<byte> span = reader.GetSpan();
417 {
418 case MetadataPropertyName.Id:
420 if (!converterBase.CanHaveIdMetadata)
421 {
422 ThrowHelper.ThrowJsonException_MetadataCannotParsePreservedObjectIntoImmutable(converterBase.TypeToConvert);
423 }
424 state.Current.ObjectState = StackFrameObjectState.ReadAheadIdValue;
425 break;
426 case MetadataPropertyName.Ref:
428 if (converterBase.IsValueType)
429 {
430 ThrowHelper.ThrowJsonException_MetadataInvalidReferenceToValueType(converterBase.TypeToConvert);
431 }
432 state.Current.ObjectState = StackFrameObjectState.ReadAheadRefValue;
433 break;
434 case MetadataPropertyName.Values:
435 ThrowHelper.ThrowJsonException_MetadataInvalidPropertyWithLeadingDollarSign(span, ref state, in reader);
436 break;
437 default:
438 state.Current.ObjectState = StackFrameObjectState.PropertyValue;
439 state.Current.PropertyState = StackFramePropertyState.ReadName;
440 return true;
441 }
442 }
443 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadRefValue)
444 {
445 if (!TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadRefValue))
446 {
447 return false;
448 }
449 }
450 else if (state.Current.ObjectState == StackFrameObjectState.ReadAheadIdValue && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadIdValue))
451 {
452 return false;
453 }
454 if (state.Current.ObjectState == StackFrameObjectState.ReadRefValue)
455 {
456 if (reader.TokenType != JsonTokenType.String)
457 {
458 ThrowHelper.ThrowJsonException_MetadataValueWasNotString(reader.TokenType);
459 }
460 string @string = reader.GetString();
461 object obj = state.ReferenceResolver.ResolveReference(@string);
464 state.Current.ObjectState = StackFrameObjectState.ReadAheadRefEndObject;
465 }
466 else if (state.Current.ObjectState == StackFrameObjectState.ReadIdValue)
467 {
468 if (reader.TokenType != JsonTokenType.String)
469 {
470 ThrowHelper.ThrowJsonException_MetadataValueWasNotString(reader.TokenType);
471 }
472 converterBase.CreateInstanceForReferenceResolver(ref reader, ref state, options);
473 string string2 = reader.GetString();
474 state.ReferenceResolver.AddReference(string2, state.Current.ReturnValue);
475 state.Current.ObjectState = StackFrameObjectState.CreatedObject;
476 }
478 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadRefEndObject && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadRefEndObject))
479 {
480 return false;
481 }
482 if (state.Current.ObjectState == StackFrameObjectState.ReadRefEndObject && reader.TokenType != JsonTokenType.EndObject)
483 {
484 ThrowHelper.ThrowJsonException_MetadataReferenceObjectCannotContainOtherProperties(reader.GetSpan(), ref state);
485 }
486 return true;
487 }
static void ValidateValueIsCorrectType< T >(object value, string referenceId)
static readonly byte[] s_refPropertyName
static bool TryReadAheadMetadataAndSetState(ref Utf8JsonReader reader, ref ReadStack state, StackFrameObjectState nextState)
static MetadataPropertyName GetMetadataPropertyName(ReadOnlySpan< byte > propertyName)
static readonly byte[] s_idPropertyName

References System.Text.Json.Dictionary, System.Text.Json.JsonSerializer.GetMetadataPropertyName(), System.obj, System.options, System.Text.Json.JsonSerializer.s_idPropertyName, System.Text.Json.JsonSerializer.s_refPropertyName, System.state, System.Text.Json.ThrowHelper.ThrowJsonException_MetadataCannotParsePreservedObjectIntoImmutable(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataInvalidPropertyWithLeadingDollarSign(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataInvalidReferenceToValueType(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataReferenceObjectCannotContainOtherProperties(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataValueWasNotString(), System.Text.Json.JsonSerializer.TryReadAheadMetadataAndSetState(), and System.Text.Json.JsonSerializer.ValidateValueIsCorrectType< T >().