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

C# 重构后反序列化遗留(二进制)文件,c#,delegates,serialization,C#,Delegates,Serialization,我试图重新组织应用程序的命名空间层次结构,因此我使用System.Runtime.Serialization.SerializationBinder子类来尝试处理重命名。(我重命名的大多数类都正确地反序列化到它们的新名称空间中,没有问题。) 我遇到的问题是,我的一个序列化类(实现了INotifyPropertyChanged)未能将PropertyChanged事件标记为[field:NonSerialized](oops),因此遗留文件保留对该类的遗留类型的引用(通过序列化委托) 我在重命名的

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

我遇到的问题是,我的一个序列化类(实现了
INotifyPropertyChanged
)未能将
PropertyChanged
事件标记为
[field:NonSerialized]
(oops),因此遗留文件保留对该类的遗留
类型的引用(通过序列化委托)

我在重命名的类上实现了
ISerializable
,试图避免对
PropertyChanged
事件进行反序列化,但这似乎不起作用——仍然会尝试实例化旧的(重命名的)类


如何强制
二进制格式化程序
避免尝试反序列化委托?

委托可以在类外声明是有原因的。

解决方案似乎是在包含对
类型
的引用的类上实现
ISerializable
,以及手动管理序列化了哪些字段以及如何序列化。这要求重构类在原始命名空间中保留一个类存根,用于中间构建,在中间构建中,我们将遗留文件转换为新的(重构)格式。无法恢复向后兼容性,但我们能够修复有问题的文件。

如果我反序列化一个中间文件,其中PropertyChanged被标记为非序列化,则该文件反序列化时不会出现问题。这不是很有帮助。我知道PropertyChanged事件应该被标记为[非序列化]。事实并非如此。我现在想问的是,我是否可以做些什么来避免破坏与设计糟糕的序列化文件的向后兼容性。