2016年7月17日 星期日

[C#] 序列化

一、名詞簡釋

在程式中產生的物件都是存在記憶體中,當程式終止後物件就會消失,如果我們想要永久保存這些物件就可以使用序列化,把物件存到檔案系統中,日後要再使用反序列化還原物件即可。
除了保存之外,物件須傳送至網路或遠端服務但對方卻無法辨釋你所定義的類別時,可把物件序列化成Soap或Xml這種通用的格式來傳遞物件。
1.BinaryFormatter 物件序列化成二進位檔,從二進位檔還原回物件
2.XmlSerializer 物件序列化成Xml檔,從Xml檔還原回物件
3.SoapFormatter 物件序列化成Soap檔,從Soap檔還原回物件

二、程式範例

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

[Serializable]
public class Person
{
 public string Name { get; set; }
 public int Age { get; set; }
 public Person(){
  Name = "Kobe";
  Age = 30;
 }
}

class Program
{
 static void Serialize()
 {
  Person p = new Person();//自訂義物件
  FileStream fs = new FileStream(@"D:\BinaryFormatter.txt",FileMode.Create);//資料流物件
  BinaryFormatter bf = new BinaryFormatter();//二進位格式序列化物件
  bf.Serialize(fs, p);//序列化
  fs.Flush();
  fs.Close();
  fs.Dispose();
 }
 static Person Deserialize()
 {
  Person p;
  FileStream fs = new FileStream(@"D:\BinaryFormatter.txt", FileMode.Open);
  BinaryFormatter bf = new BinaryFormatter();
  p = (Person)bf.Deserialize(fs);//反序列化
  return p;
 }
 static void Main(string[] args)
 {
  Serialize();
  Person p = Deserialize();
  Console.Write("{0} is {1} years old",p.Name,p.Age);
  Console.ReadLine();
 }
}

沒有留言:

張貼留言