码迷,mamicode.com
首页 > 其他好文 > 详细

自定义序列化过程

时间:2014-12-28 22:18:15      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:自定义序列化过程

  

      除了使用事件以外,还可以通过自定义序列化来完成这一过程。

 

      自定义序列化只需要实现ISerializable接口就可以了。它位于using System.Runtime.Serialization;

 

 技术分享

 


 

       SerializationInfo有点儿类似于BinaryWriter和BinaryReader,用于写入和读取对象的属性值。它主要包括一组AddValue()方法和一组Get<Type>()方法,还有其他一些属性用于获得程序集和类型的信息。StreamingContext则极少使用。

 

 

 技术分享


      得到和前面类似结果:技术分享

 

注意:

 

1,需要定义一个在反序列化时候用于还原属性值的构造函数,并且函数前面的格式必须为<classname>(SerializationInfo info,StreamingContext context),它只有在反序列化时通过反射来调用,将其声明为protected可以避免改构造函数在其他情况下被调用;如果类型为sealed,那么也可以声明这个构造函数为private,但如果类型可以被继承,则声明这个构造函数为protected,以方便子类在反序列化时调用。


 

 技术分享

 

 

 

2,AddValue(string name,object value)和GetString(string name)中的参数name值必须保持一致,但不一定与类型的字段或属性名相同。

 

 

 技术分享

 

 


     大多数情况下,类型会包含多个字段和属性,此时如果使用自定义序列化,可以预见要编写很多的AddValue,和get<Type>方法。因此,在这种情况下,最好像前面那样编写序列化事件处理方法。但是在一种情况下只能通过实行Iserializable来进行序列化和反序列化,这种情况就是继承自一个不可序列化的基类。

 技术分享



技术分享

 

     有了事件处理方法,在加上自定义序列化,我们就能很容易处理实体对象传递过程中的序列化过程了。







自定义序列化过程

标签:自定义序列化过程

原文地址:http://blog.csdn.net/lhc1105/article/details/42218477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!