具有 ISerializable 构造函数的可序列化类

Posted

技术标签:

【中文标题】具有 ISerializable 构造函数的可序列化类【英文标题】:Serializable class with ISerializable constructor 【发布时间】:2015-08-19 14:33:40 【问题描述】:

是否可以声明类[Serializable],然后添加一个 带有签名(SerializationInfo information, StreamingContext context) 的构造函数在反序列化时执行某些特定任务?

【问题讨论】:

【参考方案1】:

您可以继承ISerializable,也可以在您的类中添加几个在序列化/反序列化期间调用的自定义方法。

这些方法用特殊属性装饰,告诉序列化程序调用它们:

OnDeserializedAttribute

OnDeserializingAttribute

OnSerializedAttribute

OnSerializingAttribute

MSDN 有一个很棒的教程(我不需要在这里重复)关于如何使用这些属性:

https://msdn.microsoft.com/en-us/library/ty01x675%28v=vs.110%29.aspx 并查看为每个属性提供的链接以实现每个属性的方法。

【讨论】:

以上是关于具有 ISerializable 构造函数的可序列化类的主要内容,如果未能解决你的问题,请参考以下文章

将 ISerializable 与 DataContractSerializer 一起使用时,如何阻止序列化程序输出类型信息?

编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程

编写高质量代码改善C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化

protobuf.net 和条件序列化

ISerializable 接口的意义何在?

Serializable 指示一个类可以序列化;ICloneable支持克隆,即用与现有实例相同的值创建类的新实例(接口);ISerializable允许对象控制其自己的序列化和反序列化过程(接口)(