我有一个使用二进制序列化深度克隆的数据对象。此数据对象支持属性更改事件,例如 PriceChanged。
假设我将一个处理程序附加到 PriceChanged。当代码尝试序列化 PriceChanged 时,它会引发处理程序未标记为可序列化的异常。
我的替代方案:
- 在序列化之前,我无法轻松地从事件中删除所有处理程序
- 我不想将处理程序标记为可序列化,因为我还必须递归地标记所有处理程序依赖项。
- 我不想将 PriceChanged 标记为 NonSerialized - 有数十个这样的事件可能有处理程序。编辑:我不能这样做的另一个原因是因为生成了数据类(以及事件),并且我无法直接控制生成代码。理想情况下,生成代码只会将所有事件标记为 NonSerialized。
- 理想情况下,我希望 .NET 在该点停止向下对象图并使其成为“叶子”。那么,为什么.NET 不允许将整个类标记为 NonSerialized?
--
我最终通过使处理程序实现 ISerializable 并且在序列化构造函数/ GetDataObject 方法中什么都不做来解决这个问题。但是,处理程序仍然是序列化的,只是它的所有依赖项都设置为 null - 所以我也必须考虑到这一点。
有没有更好的方法来防止整个类的序列化?也就是说,不需要考虑空依赖项?