BinaryFormatter如何在DeSerialise上知道哪种对象被保留?

时间:2016-05-01 11:11:31

标签: c#

使用BinaryFormatter进行DeSerialise时,我发现我得到了正确的对象类型。

即使对象是从另一个对象继承的,BinaryFormatter如何保留正确的对象?它如何在DeSerialise上创建正确的对象?

示例:

[Serializable]
public class Class1
{
    public string Id { get; set; }
    public int Age { get; set; }
}

[Serializable]
public class Class2 : Class1
{
    public string Id1 { get; set; }
    public int Age1 { get; set; }
}
BinaryFormatter bf = new BinaryFormatter();

Class1 c1 = new Class1();
Class2 c2 = new Class2();

byte[] c1Bytes;
byte[] c2Bytes;

using (MemoryStream ms = new MemoryStream())
{
    bf.Serialize(ms, c2);
    c2Bytes = ms.GetBuffer();
}

using (MemoryStream ms = new MemoryStream(c2Bytes))
{
    var t = bf.Deserialize(ms);

    string rr = t.ToString();    // rr contain "Class2" 

}

2 个答案:

答案 0 :(得分:2)

检查c2bytes的内容(在c2bytes变量上使用visual studio的内存查看器)和google .net reflection

答案 1 :(得分:2)

因为BinaryFormatter将类型信息存储在序列化数据中。您可以查看格式规范here