重构后反序列化遗留(二进制)文件

时间:2010-08-16 22:33:09

标签: c# delegates serialization

我正在尝试重新组织应用程序的命名空间层次结构,所以我使用System.Runtime.Serialization.SerializationBinder子类来尝试处理重命名。 (我的大多数重命名的类都被正确地反序列化到它们的新命名空间中而没有任何问题。)

我遇到的问题是一个我的序列化类(实现INotifyPropertyChanged)未能将PropertyChanged事件标记为[field:NonSerialized](oops),所以遗留文件继续引用该类的遗留Type(通过序列化委托)。

我在重命名的类上实现了ISerializable,试图避免反序列化PropertyChanged事件,但这似乎没有用 - 试图实例化旧的(重命名的)上课仍然会发生。

如何强制BinaryFormatter避免尝试反序列化代理?

2 个答案:

答案 0 :(得分:1)

看来,解决方案是在包含对ISerializable的引用的类上实现Type,并手动管理序列化的字段以及方法。这要求重构的类在原始命名空间中留下类存根以用于中间构建,其中我们将旧文件转换为新的(重构的)格式。向后兼容性无法恢复,但我们能够挽救有问题的文件。

答案 1 :(得分:0)

为什么代表可以被宣布为外部课程。