赞
踩
5、自定义序列化
如果你希望让用户对类进行串行化,但是对数据流的组织方式不完全满意,那么可以通过在自定义类中实现接口来自定义串行化行为。这个接口只有一个方法,GetObjectData.这个方法用于将对类对象进行串行化所需要的数据填进SerializationInfo对象。你使用的格式化器将构造SerializationInfo对象,然后在串行化时调用GetObjectData.如果类的父类也实现了ISerializable,那么应该调用GetObjectData的父类实现。
如果你实现了ISerializable,那么还必须提供一个具有特定原型的构造器,这个构造器的参数列表必须与GetObjectData相同。这个构造器应该被声明为私有的或受保护的,以防止粗心的开发人员直接使用它。
备注:
这里写了一个很复杂的自定义序列化的例子,其中包含集合,继承等关系。
对于需要自定义序列化的类,需要使其继承ISerializable接口,实现GetObjectData函数以及添加一个带相同参数的构造函数。
序列化时,系统调用GetObjectData保存信息,反序列化时,系统调用带参数的构造函数创建对象。
如果基类自定义了序列化,那么子类在自定义序列化方法时首先要调用基类的自定义方法,然后再进行自己的序列化操作。
基类的GetObjectData方法必须注明是virtual的,否则子类无法正常序列化。
自定义序列化必须使用BinaryFormatter进行序列化操作,xml无法正常工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。