Ejemplo n.º 1
0
 /// <summary>
 /// Configures the next frame for a continuation of a polymorphic converter.
 /// </summary>
 public JsonConverter ResumePolymorphicReEntry()
 {
     Debug.Assert(PolymorphicSerializationState == PolymorphicSerializationState.PolymorphicReEntrySuspended);
     Debug.Assert(PolymorphicJsonTypeInfo is not null);
     PolymorphicSerializationState = PolymorphicSerializationState.PolymorphicReEntryStarted;
     return(PolymorphicJsonTypeInfo.ConverterBase);
 }
Ejemplo n.º 2
0
 public void EndProperty()
 {
     JsonPropertyInfo              = null !;
     JsonPropertyNameAsString      = null;
     PropertyState                 = StackFramePropertyState.None;
     PolymorphicSerializationState = PolymorphicSerializationState.None;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Configures the next stack frame for a polymorphic converter.
        /// </summary>
        public JsonConverter InitializePolymorphicReEntry(JsonTypeInfo derivedJsonTypeInfo)
        {
            Debug.Assert(PolymorphicSerializationState == PolymorphicSerializationState.None);

            PolymorphicJsonTypeInfo       = derivedJsonTypeInfo.PropertyInfoForTypeInfo;
            PolymorphicSerializationState = PolymorphicSerializationState.PolymorphicReEntryStarted;
            return(PolymorphicJsonTypeInfo.ConverterBase);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Configures the next stack frame for a polymorphic converter.
        /// </summary>
        public JsonConverter InitializePolymorphicReEntry(Type runtimeType, JsonSerializerOptions options)
        {
            Debug.Assert(PolymorphicSerializationState == PolymorphicSerializationState.None);

            // For perf, avoid the dictionary lookup in GetOrAddJsonTypeInfo() for every element of a collection
            // if the current element is the same type as the previous element.
            if (PolymorphicJsonTypeInfo?.PropertyType != runtimeType)
            {
                JsonTypeInfo typeInfo = options.GetOrAddJsonTypeInfo(runtimeType);
                PolymorphicJsonTypeInfo = typeInfo.PropertyInfoForTypeInfo;
            }

            PolymorphicSerializationState = PolymorphicSerializationState.PolymorphicReEntryStarted;
            return(PolymorphicJsonTypeInfo.ConverterBase);
        }
Ejemplo n.º 5
0
 public void EndDictionaryEntry()
 {
     PropertyState = StackFramePropertyState.None;
     PolymorphicSerializationState = PolymorphicSerializationState.None;
 }
Ejemplo n.º 6
0
 public void EndCollectionElement()
 {
     PolymorphicSerializationState = PolymorphicSerializationState.None;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Updates frame state after a polymorphic converter has returned.
 /// </summary>
 public void ExitPolymorphicConverter(bool success)
 {
     PolymorphicSerializationState = success ? PolymorphicSerializationState.None : PolymorphicSerializationState.PolymorphicReEntrySuspended;
 }
Ejemplo n.º 8
0
 public void ExitPolymorphicConverter(bool success)
 {
     Debug.Assert(PolymorphicSerializationState == PolymorphicSerializationState.PolymorphicReEntryStarted);
     PolymorphicSerializationState = success ? PolymorphicSerializationState.None : PolymorphicSerializationState.PolymorphicReEntrySuspended;
 }
Ejemplo n.º 9
0
 public void EnterPolymorphicConverter()
 {
     Debug.Assert(PolymorphicSerializationState != PolymorphicSerializationState.PolymorphicReEntryStarted);
     PolymorphicSerializationState = PolymorphicSerializationState.PolymorphicReEntryStarted;
 }