【问题标题】:How is the object created when using ISerializationSurrogate?使用 ISerializationSurrogate 时如何创建对象?
【发布时间】:2018-07-21 08:14:54
【问题描述】:

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

MSDN 说:

在反序列化期间调用 SetObjectData 方法。使用此方法,您可以将已创建的空Object obj 输入到该对象中。在信息反序列化和对象重建期间不调用构造函数。

我的问题是:如何创建对象?也许有人可以在http://www.sourceof.net 向我指出发生这种情况的代码?

【问题讨论】:

    标签: c# serialization deserialization binary-serialization


    【解决方案1】:

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

    GetUninitializedObject 的实现深入 CLR 本身,如果你真的感兴趣,可以查看源代码here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2020-07-02
      • 1970-01-01
      • 2011-05-11
      • 2019-03-20
      • 1970-01-01
      相关资源
      最近更新 更多