何謂序列化(Serialization)

摘要:何謂序列化(Serialization)

針對序列化(Serialization)這個名稱之前都是似懂非懂的,今天就來給它研究看看,啥咪是Serialization呢? 簡單來說,就是將物件放在可儲存的媒體,像是硬碟等等.....

實作序列化常見的有兩種作法:

1.使用 Formatter 類別 (今天就實作這個)
2.使用 XmlSerializer 類別

第一步:先要import System.Runtime.Serialization這個命名空間,然後這個要序列化的類別上加上[Serializable] 這個標記

using System.Runtime.Serialization; 
    
//要被序列化的類別
[Serializable]  
class Users
{
   public string id;
   public string name;
   public int age;
}

第二步:先要import System.Runtime.Serialization和System.Runtime.Serialization.Formatters.Binary的命名空間,等等會利用我們的Users類別(已經序列化的類別),例下就是利用Formatter 來做轉換,將User類別存到txt檔上,並且可以反序列化將txt檔放在User類別上 

 

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

//序列化
private void button1_Click(object sender, EventArgs e)
{
   Users objuser = new Users();

   objuser.id = "1";
   objuser.name = "Brian";
   objuser.age = 30;

   IFormatter formatter = new BinaryFormatter();

   FileStream fs = new FileStream(@"c:\\users.txt", FileMode.Create);

   formatter.Serialize(fs, objuser);

   fs.Close();   
}

//反序列化
private void btnDeserialize_Click(object sender, EventArgs e)
{
   FileStream fs = new FileStream(@"c:\\users.txt", FileMode.Open);

   IFormatter formatter = new BinaryFormatter();

   Users objuser = (Users)formatter.Deserialize(fs);

   this.labId.Text = objuser.id;
   this.labName.Text = objuser.name;
   this.labAge.Text = objuser.age.ToString();

   fs.Close();    
}