有時候我們希望把類的實例保存下來,以便以后的時候用。一個直觀的方法就是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>;
序列化可以做很多事情,這里僅僅舉了兩個簡單的例子,很容易可以舉一反三.