.net序列化和反序列化(一)——自动序列化

.Net的自动序列化和反序列化对象的方法是通过反射实现的。因此我们不仅可以序列化public字段,还可以序列化private字段和基类的字段。

.Net在序列化是把对象的状态保存在流(stream)中。因此,只要选择一个合适的流类型就可以将对象序列化到任何媒介。例如,文件、网络、xml等。但是静态字段是不能序列化的。

Serializable属性

你可以在类的定义中使用Serializable属性,表示类是可序列化的。

 

[Serializable]
    
public   class  MyClass
    {
        
private   int  Id;

        
private   string  Name;
    }

NonSerialized属性

在一个可序列化得类中,如果有不能被序列化得成员该怎么办呢?解决方法是,要标记类成员的属性为NonSerialized。

 

 1  [Serializable]
 2  public   class  MyClass
 3  {
 4       private   int  Id;
 5 
 6       private   string  Name;
 7 
 8      [NonSerialized]
 9       private  Object State;
10  }

 

 

IDeserializationCallback接口

在反序列化时,.net将每个不可序列化得成员变量初始化为该类型的默认值。然后由你提供的方法将变量设置为正确的值。为了做到这一点,我们需要在反序列化结束以后来完成我们定义的处理方法。此时需要序列化类实现IDeserializationCallback接口。在.Net反序列化对象之后,IDeserializationCallback的方法OnDeserialization()被调用,来完成我们自定义的反序列化步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值