我有一个在.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,并且字段类型没有改变。
有没有办法对旧格式文件进行反序列化,而不是手动反向设计旧格式并编写自己的手动反序列化例程?
答案 0 :(得分:5)
序列化期间,格式化程序 传输所需的信息 创建一个对象的实例 正确的类型和版本。这个 信息通常包括 完整类型名称和程序集名称 物体。程序集名称包括 名称,版本和强名称 (参见强名称程序集)哈希值 集会。默认情况下, 反序列化使用此信息 创建一个相同的实例 对象(除了任何对象) 装配限制由 安全政策)。有些用户需要 控制加载哪个类 因为班级之间已经移动了 程序集或不同版本的 该类在服务器上是必需的 和客户。