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”属性,或者不使用它们+值计算?