代码之家  ›  专栏  ›  技术社区  ›  BennoDual

使用ISerializationSurrogate时如何创建对象?

  •  1
  • BennoDual  · 技术社区  · 6 年前

    我使用ISerialization代理。在 object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) obj将是空的新对象。

    MSDN说:

    在反序列化期间调用setObjectData方法。用这种方法,你可以把空的 Object obj 已经创建,然后输入 SerializationInfo info data 进入那个物体。在信息反序列化和对象重建期间,不会调用构造函数。

    我的问题是:如何创建对象?也许有人能把我的代码指向 http://www.sourceof.net 这发生在哪里?

    1 回复  |  直到 6 年前
        1
  •  2
  •   György Kőszeg    6 年前

    对象由 FormatterServices.GetUninitializedObject 方法。从中调用它的代码是 here .

    实施 GetUninitializedObject 在clr本身的深处,您可以看到源代码 here 如果你真的感兴趣的话。

    如果您有要反/序列化的对象源,最好实现 ISerializable 并使用特殊的构造函数,因为您可以从中设置只读字段。使用代理时,只能通过反射来设置只读字段,反射不仅速度慢,而且需要完全信任权限。