public void DeserializeInstance(SlimReader reader, TypeRegistry registry, RefPool refs, ref object instance, StreamingContext streamingContext) { if (m_MethodsOnDeserializing != null) { invokeAttributedMethods(m_MethodsOnDeserializing, instance, streamingContext); } if (m_Deserialize != null) { m_Deserialize(Schema, reader, registry, refs, ref instance, streamingContext); } else { var info = deserializeInfo(reader, registry, refs, streamingContext); //20171223 DKh Handle SerializationInfo.SetType() redefinition of serialized type if (instance.GetType() != info.ObjectType) { instance = FormatterServices.GetUninitializedObject(info.ObjectType);//ref instance is re-allocated with a different type } refs.AddISerializableFixup(instance, info); } if (m_MethodsOnDeserialized != null) { refs.AddOnDeserializedCallback(instance, this); } }
public void DeserializeInstance(SlimReader reader, TypeRegistry registry, RefPool refs, ref object instance, StreamingContext streamingContext) { if (m_MethodsOnDeserializing != null) { invokeAttributedMethods(m_MethodsOnDeserializing, instance, streamingContext); } if (m_Deserialize != null) { m_Deserialize(Schema, reader, registry, refs, ref instance, streamingContext); } else { var info = deserializeInfo(reader, registry, refs, streamingContext); refs.AddISerializableFixup(instance, info); } if (m_MethodsOnDeserialized != null) { refs.AddOnDeserializedCallback(instance, this); } }