使用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"
}
答案 0 :(得分:2)
检查c2bytes的内容(在c2bytes变量上使用visual studio的内存查看器)和google .net reflection
答案 1 :(得分:2)
因为BinaryFormatter
将类型信息存储在序列化数据中。您可以查看格式规范here