C#基礎知識回顧--串行化與反串行化


        串行化是指存儲和獲取磁盤文件、內存或其他地方中的對象。在串行化時,所有的實例數據都保存到存儲介質上,

在取消串行化時,對象會被還原,且不能與其原實例區別開來。只需給類添加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; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM