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

◆ ResolveMetadataForJsonArray< T >()

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

Definition at line 489 of file JsonSerializer.cs.

490 {
491 JsonConverter converterBase = state.Current.JsonTypeInfo.PropertyInfoForTypeInfo.ConverterBase;
492 if ((int)state.Current.ObjectState < 2 && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadNameOrEndObject))
493 {
494 return false;
495 }
496 if (state.Current.ObjectState == StackFrameObjectState.ReadNameOrEndObject)
497 {
498 if (reader.TokenType != JsonTokenType.PropertyName)
499 {
500 ThrowHelper.ThrowJsonException_MetadataPreservedArrayValuesNotFound(ref state, converterBase.TypeToConvert);
501 }
502 ReadOnlySpan<byte> span = reader.GetSpan();
504 {
505 case MetadataPropertyName.Id:
507 if (!converterBase.CanHaveIdMetadata)
508 {
509 ThrowHelper.ThrowJsonException_MetadataCannotParsePreservedObjectIntoImmutable(converterBase.TypeToConvert);
510 }
511 state.Current.ObjectState = StackFrameObjectState.ReadAheadIdValue;
512 break;
513 case MetadataPropertyName.Ref:
515 if (converterBase.IsValueType)
516 {
517 ThrowHelper.ThrowJsonException_MetadataInvalidReferenceToValueType(converterBase.TypeToConvert);
518 }
519 state.Current.ObjectState = StackFrameObjectState.ReadAheadRefValue;
520 break;
521 case MetadataPropertyName.Values:
522 ThrowHelper.ThrowJsonException_MetadataMissingIdBeforeValues(ref state, span);
523 break;
524 default:
525 ThrowHelper.ThrowJsonException_MetadataPreservedArrayInvalidProperty(ref state, converterBase.TypeToConvert, in reader);
526 break;
527 }
528 }
529 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadRefValue)
530 {
531 if (!TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadRefValue))
532 {
533 return false;
534 }
535 }
536 else if (state.Current.ObjectState == StackFrameObjectState.ReadAheadIdValue && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadIdValue))
537 {
538 return false;
539 }
540 if (state.Current.ObjectState == StackFrameObjectState.ReadRefValue)
541 {
542 if (reader.TokenType != JsonTokenType.String)
543 {
544 ThrowHelper.ThrowJsonException_MetadataValueWasNotString(reader.TokenType);
545 }
546 string @string = reader.GetString();
547 object obj = state.ReferenceResolver.ResolveReference(@string);
550 state.Current.ObjectState = StackFrameObjectState.ReadAheadRefEndObject;
551 }
552 else if (state.Current.ObjectState == StackFrameObjectState.ReadIdValue)
553 {
554 if (reader.TokenType != JsonTokenType.String)
555 {
556 ThrowHelper.ThrowJsonException_MetadataValueWasNotString(reader.TokenType);
557 }
558 converterBase.CreateInstanceForReferenceResolver(ref reader, ref state, options);
559 string string2 = reader.GetString();
560 state.ReferenceResolver.AddReference(string2, state.Current.ReturnValue);
561 state.Current.ObjectState = StackFrameObjectState.ReadAheadValuesName;
562 }
564 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadRefEndObject && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadRefEndObject))
565 {
566 return false;
567 }
568 if (state.Current.ObjectState == StackFrameObjectState.ReadRefEndObject)
569 {
570 if (reader.TokenType != JsonTokenType.EndObject)
571 {
572 ThrowHelper.ThrowJsonException_MetadataReferenceObjectCannotContainOtherProperties(reader.GetSpan(), ref state);
573 }
574 return true;
575 }
576 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadValuesName && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadValuesName))
577 {
578 return false;
579 }
580 if (state.Current.ObjectState == StackFrameObjectState.ReadValuesName)
581 {
582 if (reader.TokenType != JsonTokenType.PropertyName)
583 {
584 ThrowHelper.ThrowJsonException_MetadataPreservedArrayValuesNotFound(ref state, converterBase.TypeToConvert);
585 }
586 ReadOnlySpan<byte> span2 = reader.GetSpan();
587 if (GetMetadataPropertyName(span2) != MetadataPropertyName.Values)
588 {
589 ThrowHelper.ThrowJsonException_MetadataPreservedArrayInvalidProperty(ref state, converterBase.TypeToConvert, in reader);
590 }
592 state.Current.ObjectState = StackFrameObjectState.ReadAheadValuesStartArray;
593 }
594 if (state.Current.ObjectState == StackFrameObjectState.ReadAheadValuesStartArray && !TryReadAheadMetadataAndSetState(ref reader, ref state, StackFrameObjectState.ReadValuesStartArray))
595 {
596 return false;
597 }
598 if (state.Current.ObjectState == StackFrameObjectState.ReadValuesStartArray)
599 {
600 if (reader.TokenType != JsonTokenType.StartArray)
601 {
602 ThrowHelper.ThrowJsonException_MetadataValuesInvalidToken(reader.TokenType);
603 }
605 state.Current.ObjectState = StackFrameObjectState.CreatedObject;
606 }
607 return true;
608 }
static void ValidateValueIsCorrectType< T >(object value, string referenceId)
static readonly byte[] s_refPropertyName
static readonly byte[] s_valuesPropertyName
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.Text.Json.JsonSerializer.s_valuesPropertyName, System.state, System.Text.Json.ThrowHelper.ThrowJsonException_MetadataCannotParsePreservedObjectIntoImmutable(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataInvalidReferenceToValueType(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataMissingIdBeforeValues(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataPreservedArrayInvalidProperty(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataPreservedArrayValuesNotFound(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataReferenceObjectCannotContainOtherProperties(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataValuesInvalidToken(), System.Text.Json.ThrowHelper.ThrowJsonException_MetadataValueWasNotString(), System.Text.Json.JsonSerializer.TryReadAheadMetadataAndSetState(), and System.Text.Json.JsonSerializer.ValidateValueIsCorrectType< T >().