关于我的问题的一些背景知识:
我有很多实现ISerializable
的类,并且使用显式BinaryFormatter
方法进行序列化:
.ctor(SerializationInfo info, StreamingContext context)
和void GetObjectData(SerializationInfo info, StreamingContext context)
我最近发现BinaryFormatter
在反序列化对象时并不总是调用构造函数。
据推测,BinaryFormatter
应该是逐位将对象图复制到内存中,因此不会在'Already Constructed'对象上调用构造函数。
这对我不起作用:当调用OnDeserialized
并且构造函数未运行时,我的私有成员始终为空引用。
如果我仍然可以检索由GetObjectData
收集的序列化数据,则可能会解决此问题,但除了使我能够访问SerializationInfo
对象的构造函数之外,我找不到任何其他内容。
我的问题,然后:
除了.ctor(SerializationInfo info, StreamingContext context)
之外,有没有办法检索void GetObjectData(SerializationInfo info, StreamingContext context)
期间收集的值?
或
有什么线索BinaryFormatter
如何决定是否调用构造函数?如果我可以强迫BinaryFormatter
始终使用构造函数,我相信我的问题将会得到解决。