【发布时间】:2015-07-13 14:54:32
【问题描述】:
基本示例:
Person person = new Person("Bob",50);
BinaryFormatter binaryFormatter = new BinaryFormatter();
MemoryStream memoryStream = new MemoryStream();
binaryFormatter.Serialize(memoryStream, person);
Byte[] data = memoryStream.ToArray();
MemoryStream received = new MemoryStream(data,false);
object obj = binaryFormatter.Deserialize(received);
if (obj is Person)
{
Person des = obj as Person;
Console.WriteLine("{0} {1}", des.Name, des.Age);
}
问题是,如果我在不同的项目中创建相同的类(名称、字段),我将无法重建字节流。
有什么解决办法吗?
【问题讨论】:
-
这里使用 MemoryStream 的原因是什么?你到底想做什么?
-
正如您的回答所说,二进制序列化包含详细的类型信息(不仅是完整的命名空间,还有版本),并且您不能反序列化为另一种类型(即使它看起来相同,如果它在不同的组件中,它的类型不同)。唯一的解决方案是将其移动到两个项目都可以引用的程序集或使用不同形式的序列化。更糟糕的是,如果您修改包含它的程序集,它可能会破坏您的序列化对象。
标签: c# serialization