C# 把類實例保存到文件里(類的序列化和反序列化)


有時候我們希望把類的實例保存下來,以便以后的時候用。一個直觀的方法就是StreamWriter把類寫成一行,用\t分隔開每個屬性,然后用StreamReader讀出來。

但是這樣太麻煩,代碼行數較多,而且必須事先知道屬性在行中的對應位置。這時候如果采用類序列化的方式保存就使得代碼很簡單:

假如你有一個類,在它的上面加上[Serializable]屬性就可以了,表示這個類是可以序列化的

[Serializable]
public class People
{
    public string Name { get; set; }
    public int Age { get; set; }
}
然后采用如下代碼將類的實例序列化到文件中
//序列化
FileStream fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Create);
People p = new People() { Name = "Haocheng Wu", Age = 24 };

BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, p);
fs.Close();

這樣就能夠上面的那個文件就保存了這個類的實例,如果想要讀出來,就可以用

//反序列化
fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
People p = bf.Deserialize(fs) as People;

運用同樣的方法,也可以把一個類的List完全序列化到文件中

//序列化List
FileStream fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();

List<People> ps = new List<People>();
ps.Add(new People() { Name = "Haocheng Wu", Age = 24 });
ps.Add(new People() { Name = "James Wu", Age = 23 });

bf.Serialize(fs, ps);
fs.Close();

讀出來的方法也是一樣的:

//反序列化List
fs = new FileStream(@"D:\Program\CSharp\NGramTest\NGramTest\serializePeople.dat", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
List<People> ps = bf.Deserialize(fs) as List<People>;

序列化可以做很多事情,這里僅僅舉了兩個簡單的例子,很容易可以舉一反三.


免責聲明!

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



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