我不确定这段代码是如何工作的。
[Serializable]
class Blah
{
public Blah(int value)
{
this.value = value;
}
public int value;
}
BinaryFormatter b = new BinaryFormatter();
Blah blah = new Blah(4);
MemoryStream s = new MemoryStream();
b.Serialize(s, blah);
s.Seek(0, SeekOrigin.Begin);
blah = null;
blah = (Blah)b.Deserialize(s);
因为我没有无参数构造函数,所以反序列化器可以创建一个新的Blah实例似乎很奇怪。
答案 0 :(得分:5)
反序列化过程使用FormatterServices.GetUninitializedObject
获取对象而不调用任何构造函数。
答案 1 :(得分:4)
序列化程序在反序列化对象时不会调用构造函数。字段的值直接设置。它不需要创建对象(通过new
)它只是创建存储,填充它,并将其转换为Blah
类型。
答案 2 :(得分:1)
BinaryFormatter
使用名为FormatterServices.GetUninitializedObject
的voodoo方法:
...对象初始化为零,没有构造函数运行