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