C#基礎增強(9)之對象序列化(二進制)

介紹

對象序列化是將對象轉換爲二進制數據(字節流),反序列化是將二進制數據還原成對象。對象的非持久態的,不只在程序重啓、操做系統重啓會形成對象的丟失,就是退出函數範圍等均可能形成對象的消失,而序列化與反序列化就是爲了完成對象的持久化。ide

使用

新建可序列化的實體類:函數

[Serializable] // 該特性標記該類可序列化
public class Person
{
    private int id;

    private string name;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public override string ToString()
    {
        return string.Format("Id: {0}, Name: {1}", id, name);
    }
}

序列化

var person = new Person();
person.Id = 1;
person.Name = "張三";
// 初始化序列化工具類對象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenWrite("D:/data"); // 獲取一個輸出流對象
binaryFormatter.Serialize(fs,person); // 執行序列化
fs.Close();

反序列化

// 初始化序列化工具類對象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenRead("D:/data"); // 獲取一個輸入流對象
var obj = binaryFormatter.Deserialize(fs);
Console.WriteLine(obj); // Id: 1, Name: 張三
fs.Close();

注意事項

  • 序列化類必須標註上 [Serializable] 特性。
  • 序列化類的父類也必須標註上 [Serializable] 特性。
  • 序列化類的全部成員的類型也必須標註上 [Serializable] 特性。
  • 序列化只會對類中的字段序列化,只能序列化一些狀態信息。
  • 類結構修改後那麼以前序列化的內容儘可能不要再用了,不然可能出錯。
相關文章
相關標籤/搜索