序列化与反序列化(1)

来源:互联网 发布:淘宝店食品流通许可证 编辑:程序博客网 时间:2024/06/14 21:58
在ASP.NET中,存储信息数据一般有以下三种方式做为选择:

一、存储到 Session 中;
二、存储到 Cookie 中;
三、存储到 数据库 中。

同时,序列化的作用也是这样,不过我认为序列化这种方法更安全,更合理。那么,

序列化是什么:


序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。

序列化有什么特点:


如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态, transient代表对象的临时数据。


什么时候使用序列化:

一:对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
二:对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。



如果你做远程方法调用(RPC)时,比如,服务器端有个类A及对象a,客户端需要无视网络的存在,直接调用对象a。这种情况下,就需要把类A设计为可序列化的,那么它的实例a也就可以实例化了。

说得简单点,在服务器的 命名空间中的对象a,肯定不能直接被客户端的命名空间中的一个对象调用,这不可能,对吧。
但是如果你把服务器的对象a中的特征属性(不一定是所有属性)变成xml,传送到客户端,然后客户端用你给的特征属性可以模拟的生成一个对象a。
这个过程就是 rpc,而要把对象a变成xml,就是序列化,反之,把xml变成模拟对象a就是反序列化。

以上是rpc中的序列化。

实际使用中,把app关闭的时候,内存对象可以通过序列化,可以变成可以保存的xml,这样,以便下次app再开得时候,把以前保存过的xml(或者txt等)反序列化成对象。

一句话,序列化就是把内存中对象以一种可以保存的形式保存起来。

需要注意的是:
序列化可以制定序列化整个类,或者 类的某些属性。

---------------------------------------------------------------------------------------------------------------------------------

1 序列化
命名空间 using System.Runtime.Serialization.FormattersBinary
要序列化的类 头部添加[Serializable]
序列化子类 也必须可序列化
序列化
FileStream fs= new FileStream("name.txt",FileMode.Create);
BinaryFormatter bf= new BinaryFormatter();
bf.Serialize(fs,序列化类对象);

2 反序列化
FileStream fs= new FileStream("name.txt",FileMode.Open);
BinaryFormatter bf= new BinaryFormatter();
序列化类对象=(序列化类)bf.Deserialize(fs);
原创粉丝点击