串行化是指存儲和獲取磁盤文件、內存或其他地方中的對象。在串行化時,所有的實例數據都保存到存儲介質上,
在取消串行化時,對象會被還原,且不能與其原實例區別開來。只需給類添加Serializable屬性,就可以實現串行化實
的成員。反串行化是串行化的逆過程,數據從存儲介質中讀取出來,並賦給類的實例變量。串行化能保存現有對象的所有狀態,
我想我們以前見過的一些游戲的角色賬戶中的dat文件應該就是被串行化的結果。我嘗試了打開一個dat文件,果真得到了
我需要的信息,一些角色的等級之類的信息果然在里面。
串行化對象,需要先將對象加上[Serializable],如:
[Serializable] public class User { public string Name { get; set; } public string Password { get; set; } }
串行化其實很簡單,下面看個例子:
首先需要添加序列化命名空間:
using System.Runtime.Serialization.Formatters.Binary;
我們將一個用戶對象進行序列化並存儲到一個文件中:
private static void AddUser() { User user = new User(); user.Name = "admin"; user.Password = "123"; using (Stream input = File.OpenWrite("user.dat")) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(input, user); } }
取出這個對象同樣很簡單,看代碼:
public static bool VaildateUser(string pwd) { using (Stream outPut = File.OpenRead("user.dat")) { BinaryFormatter bf = new BinaryFormatter(); User user = bf.Deserialize(outPut) as User; if (user != null) { return pwd == user.Password; } } return false; }
呵呵,是不是很簡單。在進行串行化的時候,對象被轉換成二進制保存到文件中。
如果需要對部分字段序列化部分不序列化時,我們可以按照如下設置實現
[Serializable] public class User { public string Name { get; set; } public string Password { get; set; } [NonSerialized] public string Greate{ get; set; } }
