2008年9月22日 星期一

Serialize(序列化) 與 Deserialize(還原序列化)

程式是在記憶體中執行的,一旦結束程式資料也就消失了
有時候我們希望將某個物件的內容(資料)保存起來
所以必須將資料寫進檔案中,要使用的時候再重新讀進來
至於寫入的格式該怎麼訂,讀出的時候該怎麼分析這就依照個人喜好了
有時候這些步驟是很麻煩的

現在有一個叫 IFormatter 的東西可以簡單的完成這項任務
下面的例子僅將物件讀進資料流,再由資料流寫回物件

假設我們有一個自定類別,定義如下:
[Serializable]
public class MyObject
{
  public int age = 0;
  public string name = string.empty;
}
//這裡需注意的是,要使該類別的物件能被序列化,該類別必須加入[Serializable]屬性

using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;

public class Main
{
 public Main()
 {
 
 //處理序列化的物件
 
 IFormatter formatter = new BinaryFormatter();

 
 //要被序列化的物件
 
 MyObject obj = new MyObject();

 
 MemoryStream ms = new MemoryStream();
 
 //將物件序列化
  formatter .Serialize(ms, obj);

 
 //還原序列化資料
 
 ms.Position = 0;
 
 MyObject obj2 = (MyObject)formatter.Deserialize(ms);
 }
}

沒有留言:

張貼留言