C#序列化/反序列化:相同对象不同项目
基本示例:C#序列化/反序列化:相同对象不同项目,c#,serialization,C#,Serialization,基本示例: Person person = new Person("Bob",50); BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream memoryStream = new MemoryStream(); binaryFormatter.Serialize(memoryStream, person); Byte[] data = memoryStream.ToArray(); MemoryStream
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);
}
问题是,如果在不同的项目中创建相同的类(名称、字段),则无法重建字节流
有什么解决方案吗?将共享代码放在第三个项目中,然后在当前两个项目中引用该共享项目 现在,他们都可以访问该类,但不能访问您不希望共享的任何内容 使用.net二进制序列化有什么特殊原因吗 更现代的方法是使用类似JSON的数据格式 具体地说 它更灵活,允许您反序列化到“看起来”相同的任何类,甚至可以使用字典或动态对象
下面是另一个SO答案,描述了为什么二进制格式化程序不是一个很好的选择:在这里使用MemoryStream的原因是什么?您到底想做什么?正如您的回答所说,二进制序列化包含详细的类型信息(不仅包括完整的名称空间,还包括版本),并且您无法反序列化到另一个类型(即使它看起来相同,如果它在不同的程序集中,则它是不同的类型)。唯一的解决方案是将其移动到可由两个项目引用的程序集,或者使用不同形式的序列化。更糟糕的是,如果修改包含它的程序集,它可能会破坏序列化对象。