序列化例子
C#中的"序列化" Serializable 理解
我的理解:?? ?? 比如用一個類描述一張合同,而這個類實例化后其中的字段保存著合同的信息,如果現在要把這個類的實例發送到另一臺機器、另一個窗體或是想保存這個類以便以 后再取出來用(持久化對象),可以對這個類進行序列化(序列化實際上是一個信息流),傳送或保存,用的時候再反序列化重新生成這個對象
為什么您想要使用序列化?有兩個最重要的原因促使對序列化的使用:一個原因是將對象的狀態保持在存儲媒體中,以便可以在以后重新創建精確的副本;另 一個原因是通過值將對象從一個應用程序域發送到另一個應用程序域中。例如,序列化可用于在??? ASP.NET??? 中保存會話狀態并將對象復制到??? Windows??? 窗體的剪貼板中。遠程處理還可以使用序列化通過值將對象從一個應用程序域傳遞到另一個應用程序域中。?? ??? ?? 序列化的是對象的狀態?? ?? 也就是對象數據成員的值和方法是沒有關系的
跨應用程序域通信時,要用到序列化?? ?? 以及用WEB服務時 一:BinaryFormatter序列化
序列化簡單點來理解就是把內存的東西寫到硬盤中,當然也可以寫到內存中(這個內容我會在后面寫一個例子).而反序列化就是從硬盤中把信息讀到內存中.就這么簡單,呵呵,現在來看下面的例子吧!
在這篇文章中我將使用BinaryFormatter序列化類Book作為例子,希望大家能從例子中深刻體會什么是序列化.
定義類Book:
[Ref="tag-863-1.html">Serializable] public Class Book { String name; Float?? price; string author;
public Book(string bookname, float bookprice, string bookauthor) { name = bookname; price = bookprice; author = bookauthor; } }
在類的上面增加了屬性:Serializable.(如果不加這個屬性,將拋出SerializationException異常).
通過這個屬性將Book標志為可以序列化的.當然也有另一種方式使類Book可以序列化,那就是實行ISerializable接口了.在這里大家要注意了:Serializable屬性是不能被繼承的咯!!!
如果你不想序列化某個變量,該怎么處理呢?很簡單,在其前面加上屬性[NonSerialized] .比如我不想序列化
string author;
那我只需要
[NonSerialized]
string author;
好了,現在就告訴大家怎么實現序列化:
我們使用namespace:
using System;
using System.IO;
using System.RunTime.Serialization.Formatters.Binary;
首先創建Book實例,like this:
Book book = new Book("Day and Night", Numbertype="1" tcsc="0">30.0f, "Bruce");
接著當然要創建一個文件了,這個文件就是用來存放我們要序列化的信息了.
FileStream fs = new FileStream(@"C:\book.dat", FileMode.Create);
序列化的實現也很簡單,like this:
BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, book);
很簡單吧!現在我列出整個原代碼,包括反序列化.
static Void Main(string[] args) { Book book = new Book("Day and Night", 30.0f, "Bruce");
using(FileStream fs = new FileStream(@"C:\book.dat", FileMode.Create)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, book); }
book = null;
using(FileStream fs = new FileStream(@"C:\book.dat", FileMode.Open)) { BinaryFormatter formatter = new BinaryFormatter(); book = (Book)formatter.Deserialize(fs);//在這里大家要注意咯,他的返回值是Object } }
有不對的地方,請大家多多糾正.....
注意一定不要忘了: using?? System.Runtime.Serialization.Formatters.Binary;?? ??? 命名空間。
轉載于:https://www.cnblogs.com/zxp19880910/archive/2012/07/09/2583659.html
總結
- 上一篇: 人物萨鲁奇在那
- 下一篇: 现在的原木杨树多少钱一吨?