C# 未调用构造函数时显式二进制格式化程序序列化
关于我的问题的一些背景: 我有很多实现ISerializable的类,它们被设计为使用显式的BinaryFormatter方法进行序列化:C# 未调用构造函数时显式二进制格式化程序序列化,c#,.net,serialization,binaryformatter,binary-serialization,C#,.net,Serialization,Binaryformatter,Binary Serialization,关于我的问题的一些背景: 我有很多实现ISerializable的类,它们被设计为使用显式的BinaryFormatter方法进行序列化: .ctor(SerializationInfo,StreamingContext上下文)和void GetObjectData(SerializationInfo,StreamingContext上下文) 我最近发现,BinaryFormatter在反序列化对象时并不总是调用构造函数。 据推测,BinaryFormatter应该将对象图逐位复制到内存中,因此
.ctor(SerializationInfo,StreamingContext上下文)
和void GetObjectData(SerializationInfo,StreamingContext上下文)
我最近发现,BinaryFormatter
在反序列化对象时并不总是调用构造函数。
据推测,BinaryFormatter
应该将对象图逐位复制到内存中,因此不会对“已构造”对象调用构造函数。
这对我不起作用:当调用OnDeserialized
且构造函数未运行时,我的私有成员总是空引用。
如果我仍然可以检索由GetObjectData
收集的序列化数据,但除了允许我访问SerializationInfo
对象的构造函数之外,我找不到任何东西,那么这可能会得到解决
那么我的问题是:
除了.ctor(SerializationInfo,StreamingContext上下文)
,是否有其他方法检索在作废GetObjectData(SerializationInfo,StreamingContext上下文)
期间收集的值
或:
任何关于
BinaryFormatter
如何决定是否调用构造函数的线索?如果我能强迫BinaryFormatter
始终使用构造函数,我相信我的问题会得到解决。我放弃了BinaryFormatter
,转而使用XmlSerializer
。转换代码实体需要一些努力,但至少它一直在调用ReadXML()
。我放弃了BinaryFormatter
,转而使用XmlSerializer
。转换代码实体需要一些努力,但至少它一直在调用ReadXML()
。