当前位置:编程技术网 > 技术文章 > .net框架使用技巧 及 C#基础知识 > 文章详细内容

谈谈序列化,关于.net中的二进制序列化和xml序列化

        序列化技术,就是将对象持久存储。 可以这样理解:序列化就是将对象占用的内存的数据copy到持久存储设备,比如硬盘。

 

        序列化有什么用呢?2点:1、持久的存储对象状态; 2、分布式运算中传递数据的底层实现。

 

        .Net框架封装的序列化技术包含2中,即 二进制序列化 和 xml序列化

 

(以下代码都要求被序列化的对象的类型使用Serializable特征类)
二进制序列化的实现 (using System.Runtime.Serialization.Formatters.Binary;)
序列化代码
//打开文件流
FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);
//创建二进制序列化对象
BinaryFormatter bf = new BinaryFormatter();
//调用二进制序列化对象的序列化方法执行序列化操作
bf.Serialize(fs, 被序列化的对象);
//关闭文件流
fs.Close();

反序列化代码
//打开文件流
FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);
//创建二进制序列化对象
BinaryFormatter bf = new BinaryFormatter();
//调用二进制序列化对象的反序列化方法执行反序列化操作
从文件中反序列化得到的对象 = bf.Deserialize(fs) as 被序列化对象的类型;
//关闭文件流
fs.Close();




XML序列化的实现(using System.Xml.Serialization;)
序列化代码
//打开文件流
FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);
//创建XML序列化对象
XmlSerializer xs = new XmlSerializer(typeof(被序列化对象的类型));
//调用XML序列化对象的序列化方法执行序列化操作
xs.Serialize(fs, 被序列化的对象);
//关闭文件流
fs.Close();

反序列化代码
//打开文件流
FileStream fs = new FileStream(保存序列化数据的文件路径, FileMode.OpenOrCreate);
//创建XML序列化对象
XmlSerializer xs = new XmlSerializer(typeof(被序列化对象的类型));
//调用XML序列化对象的反序列化方法执行反序列化操作
从文件中反序列化得到的对象 = xs.Deserialize(fs) as 被序列化对象的类型;
//关闭文件流
fs.Close();

 

当然这里所提供的是序列化和反序列化的默认实现,能应付大多数运用。 特殊情况可以还需要重写序列化的默认实现。MSDN里面也有较详细的示例代码。

 

最后把这篇文章所涉及到源码提供给大家下载,演示的是通过序列化来持久的存储配置信息。

 

点击下载 作者|来源:原创(17fx.net)发表于:2009-2-27 22:50:46