自定义序列化过程

  

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

 

      自定义序列化只需要实现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来进行序列化和反序列化,这种情况就是继承自一个不可序列化的基类。

 




 

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







评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值