序列化和反序列化

来源:互联网 发布:linux免费邮件系统 编辑:程序博客网 时间:2024/04/23 15:14
序列化就是把一个对象转换为可以保存的形式,以利于保存和传输。   
反序列化就是把这种可保存的形式恢复为内存中的对象。
 .net提供了以下两种序列化的方法
 1. 二进制序列化
可以保留一个对象的所有的数据,对于应用程序不同调用之间保留对象状态很有用。  
二进制序列化 使用BinaryFormatter  
例:            
GrandPa me = new GrandPa();            
//序列化            
IFormatter formatter = new BinaryFormatter();            
Stream stream = new FileStream("MyFile.txt", FileMode.Create,FileAccess.Write, FileShare.None);            
formatter.Serialize(stream, me);            
stream.Close();            
//反序列化            
stream = new FileStream("MyFile.txt", FileMode.Open);
GrandPa ss=(GrandPa) formatter.Deserialize(stream);             
stream.Close();
     把类对象me序列化,并保存在文件MyFile.txt中,它序列化了对象中的所有字段private public 和 protected,即反序列化后所有的 字段值是不变的。
    当然,GrandPa类必须是可序列化的,即,
    [Serializable]
    public class GrandPa
 
 2. XML序列化   
仅序列化公共属性和字段,而且不保留类型信息 ,对不同系统之间的共享数据很有用。  
XML序列化 XmlSerializer  
例:  
MyClass me = new MyClass(24, 1.76);  me.Name = "Ralph";
//序列化
 XmlSerializer srl = new XmlSerializer(typeof(MyClass));  
 StreamWriter wrt = new StreamWriter("MyFile.xml");  
 srl.Serialize(wrt, me);  
 wrt.Close();
 //反序列化
 StreamReader rdr = new StreamReader("MyFile.xml");  
 MyClass notme = (MyClass)srl.Deserialize(rdr);  
 rdr.Close();  
把类对象me序列化,并保存在文件MyFile.xml中,但它与二进制序列化不同的是它只序列化了对象中的public字段,既反序列化后只 有public字段的值是不变的。
原创粉丝点击