C# 对实例的序列化和反序列化作出反应

C# 对实例的序列化和反序列化作出反应,c#,.net,serialization,C#,.net,Serialization,我有一个我正在序列化的类。我用[Serializable]对它进行了注释,我使用的是二进制序列化程序。一切正常 但后来我引入了新的属性,这些属性无法序列化(比如说,它们包含了很多关于GUI的乱七八糟的东西,不需要记住)。我可以根据类的其他属性计算这些属性 我需要做两次,当我序列化-清除混乱并进入准备序列化的稳定文件状态时。和反序列化-再次计算所有需要的属性 我需要对正在序列化/反序列化的“事件”实例作出反应 但是,我找不到这些事件,因为我没有实现接口ISerializable或抽象类aseriz

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

但后来我引入了新的属性,这些属性无法序列化(比如说,它们包含了很多关于GUI的乱七八糟的东西,不需要记住)。我可以根据类的其他属性计算这些属性

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

我需要对正在序列化/反序列化的“事件”实例作出反应

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

我不知道类何时被序列化,因为它不是这个类关心的问题;它被序列化为另一个类的字段


有什么方法可以对这些事件做出反应吗?

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

通过实现ISerializable来构建。使用,在序列化之前操纵对象,在反序列化之前操纵对象。

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


我的错,没有意识到你想在反序列化时重新加载一些属性。那么为什么不序列化这些呢?在可选的子对象或其他任何对象中?

必须实现
ISerializable
才能实现此功能。请注意,如果计划与序列化过程本身交互,则只需要实现ISerializable。对于OP来说,使用属性和“序列化事件”方法就足够了。他使用的是二进制序列化程序<代码>[XmlIgnoreAttribute]对二进制序列化程序没有影响。如果要序列化为二进制或SOAP,则使用非序列化;如果要使用XmlSerializer严格序列化为XML,则使用XmlIgnore。请参阅MSDN上的
[NonSerializedAttribute]
类的备注部分。尽职尽责地指出。非常感谢。但问题仍然存在:为什么不在GET访问器中使用普通序列化,使用“disaply”属性,或者不使用它们+值计算?