对实例的序列化和反序列化做出反应

时间:2012-01-16 15:16:21

标签: c# .net serialization

我有一个我正在序列化的课程。我用[Serializable]注释了它,我正在使用二进制序列化器。一切正常。

但后来我引入了新属性,这些属性无法序列化(假设它们包含很多关于GUI的混乱,不需要记录)。我可以根据类的其他属性计算这些属性。

当我序列化时,我需要做两次 - 清理混乱并进入准备进行序列化的稳定状态。反序列化 - 再次计算所有需要的属性。

我需要对“事件”实例做出反应,正在序列化/反序列化。

但是我找不到这些事件,因为我没有实现接口ISerializable或抽象类Aserializable,只有类属性[Serializable]

我不知道什么时候正在序列化类,因为它不是这个类的关注点;它被序列化为另一个类的字段。

我有办法对这些事件作出反应吗?

3 个答案:

答案 0 :(得分:2)

您可以使用OnDeserializedAttribute及其相关属性(OnSerializing,OnSerialized,OnDeserializing)来创建在序列化/反序列化过程中调用的特殊方法。

答案 1 :(得分:0)

通过实现Serializable构建Custome Serialization。使用OnSerializingAttribute来操作序列化前的对象和OnDeserializingAttribute,以便在反序列化之前进行操作。

答案 2 :(得分:0)

您是否考虑过[XmlIgnoreAttribute]属性?它将阻止属性序列化。无需篡改序列化工作流程。

我的不好,没有意识到你想在反序列化时重新加载一些属性。那么为什么不序列化这些呢?在可选的subObject中,还是其他什么?