C# 未调用构造函数时显式二进制格式化程序序列化

C# 未调用构造函数时显式二进制格式化程序序列化,c#,.net,serialization,binaryformatter,binary-serialization,C#,.net,Serialization,Binaryformatter,Binary Serialization,关于我的问题的一些背景: 我有很多实现ISerializable的类,它们被设计为使用显式的BinaryFormatter方法进行序列化: .ctor(SerializationInfo,StreamingContext上下文)和void GetObjectData(SerializationInfo,StreamingContext上下文) 我最近发现,BinaryFormatter在反序列化对象时并不总是调用构造函数。 据推测,BinaryFormatter应该将对象图逐位复制到内存中,因此

关于我的问题的一些背景: 我有很多实现ISerializable的类,它们被设计为使用显式的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()