如何反序列化有些不兼容的BinaryFormatter数据?

时间:2009-04-10 03:13:27

标签: .net serialization

我有一个在.NET 1.1中开发的继承代码库。当我将其迁移到2.0时,我重命名了一个程序集。现在,我发现有必要读取包含旧程序集和.NET 1.1序列化对象的旧文件。 某些字段已成功反序列化,但大多数都被忽略。如果我启用FormatterAssemblyStyle.Full,我会收到如下错误:

类'T_VERSION+s_sys_ver'中的成员'MyNamespace.T_VERSION'不存在于序列化流中,并且未标记为System.Runtime.Serialization.OptionalFieldAttribute。

对二进制文件的检查表明{em>以某种形式存在T_VERSION+s_sys_ve r,并且字段类型没有改变。

有没有办法对旧格式文件进行反序列化,而不是手动反向设计旧格式并编写自己的手动反序列化例程?

1 个答案:

答案 0 :(得分:5)

检查SerializationBinder

  

序列化期间,格式化程序   传输所需的信息   创建一个对象的实例   正确的类型和版本。这个   信息通常包括   完整类型名称和程序集名称   物体。程序集名称包括   名称,版本和强名称   (参见强名称程序集)哈希值   集会。默认情况下,   反序列化使用此信息   创建一个相同的实例   对象(除了任何对象)   装配限制由   安全政策)。有些用户需要   控制加载哪个类   因为班级之间已经移动了   程序集或不同版本的   该类在服务器上是必需的   和客户。