具有 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的子类型应负责父类的序列化
Serializable 指示一个类可以序列化;ICloneable支持克隆,即用与现有实例相同的值创建类的新实例(接口);ISerializable允许对象控制其自己的序列化和反序列化过程(接口)(