之前常常在項(xiàng)目或案例上看到[Serializable]但是都以為是vs自帶的標(biāo)記或是什么便沒(méi)有太在意.直到發(fā)現(xiàn)他是有固定存在位置時(shí)才認(rèn)為他非比尋常.
就目前經(jīng)驗(yàn)來(lái)說(shuō),[Serializable]的作用是將一筆數(shù)據(jù)序列化到文件中用來(lái)存儲(chǔ)一段信息,防止關(guān)閉程序后數(shù)據(jù)丟失.(百度之后好像還有類(lèi)似于標(biāo)記的作用,如后續(xù)有用到再繼續(xù)完善)
我的學(xué)習(xí)過(guò)程:1.新增一個(gè)類(lèi):
[Serializable] class Class1 {
? ? ?? public string DataTime { get; set; }
?????? public string Cust { get; set; }
}
2在mainfron中實(shí)例化
var data = new Class1{
? ? ? ? ? ? ? ? ? ? DataTime = cbo_date.Text,
? ? ? ? ? ? ? ? ? ? Cust = cbo_cust.Text? ? ?
?};
List<Class1> personInfo = new List<Class1>();//申明一個(gè)class1 類(lèi)型的personinfo
? ? ? ? ? ? ? ? personInfo.Add(data);//把實(shí)例化的數(shù)據(jù)放進(jìn)personinfo ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? IFormatter formatter = new BinaryFormatter();//創(chuàng)建一個(gè)格式化程序的實(shí)例? ? ? ? ? ? ??
? ? ? ? ? ? ? ? if (!File.Exists(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt")) //創(chuàng)建一個(gè)文件流
? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? Stream stream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
? ? ? ? ? ? ? ? ? ? foreach (Class1 per in personInfo)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? formatter.Serialize(stream, per);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? stream.Close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? Stream stream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
? ? ? ? ? ? ? ? ? ? foreach (Class1 per in personInfo)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? formatter.Serialize(stream, per);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? stream.Close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? Stream destream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.Open,
? ? ? ? ? ? ? ? FileAccess.Read, FileShare.Read);
? ? ? ? ? ? ? ? var stillme = (Class1)formatter.Deserialize(destream);
? ? ? ? ? ? ? ? MessageBox.Show(stillme.DisplayInfo());
? ? ? ? ? ? ? ? destream.Close();
兩個(gè)組數(shù)據(jù)
//var me = new Class1 //{ // Sno = "1215115231", // Name = "wuzhang", // Sex = "man", // Age = 22, // NoSerial = "不被序列化1", // Other = "\n" //}; //var he = new Class1 //{ // Sno = "1215115250", // Name = "wanggang", // Sex = "man", // Age = 21, // NoSerial = "不被序列化2", // Other = "\n" //}; //ListpersonInfo = new List();
? ? ? ? ? ? //personInfo.Add(me);
? ? ? ? ? ? //personInfo.Add(he);
? ? ? ? ? ? ////創(chuàng)建一個(gè)格式化程序的實(shí)例
? ? ? ? ? ? //IFormatter formatter = new BinaryFormatter();
? ? ? ? ? ? ////創(chuàng)建一個(gè)文件流
? ? ? ? ? ? //if (!File.Exists(System.IO.Directory.GetCurrentDirectory()+"\\TestTxt.txt"))
? ? ? ? ? ? //{
? ? ? ? ? ? //? ? //FileStream fs1 = new FileStream("F:\\TestTxt.txt", FileMode.Create, FileAccess.Write);//創(chuàng)建寫(xiě)入文件
? ? ? ? ? ? //? ? Stream stream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
? ? ? ? ? ? //? ? foreach (Class1 per in personInfo)
? ? ? ? ? ? //? ? {
? ? ? ? ? ? //? ? ? ? formatter.Serialize(stream, per);
? ? ? ? ? ? //? ? }
? ? ? ? ? ? //? ? stream.Close();
? ? ? ? ? ? //}
? ? ? ? ? ? //else
? ? ? ? ? ? //{
? ? ? ? ? ? //? ? Stream stream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
? ? ? ? ? ? //? ? foreach (Class1 per in personInfo)
? ? ? ? ? ? //? ? {
? ? ? ? ? ? //? ? ? ? formatter.Serialize(stream, per);
? ? ? ? ? ? //? ? }
? ? ? ? ? ? //? ? stream.Close();
? ? ? ? ? ? //}
? ? ? ? ? ? //Stream destream = new FileStream(System.IO.Directory.GetCurrentDirectory() + "\\TestTxt.txt", FileMode.Open,
? ? ? ? ? ? //FileAccess.Read, FileShare.Read);
? ? ? ? ? ? //var stillme = (Class1)formatter.Deserialize(destream);
? ? ? ? ? ? //var stillme1 = (Class1)formatter.Deserialize(destream);
? ? ? ? ? ? //MessageBox.Show(stillme.DisplayInfo());
? ? ? ? ? ? //MessageBox.Show(stillme1.DisplayInfo());
? ? ? ? ? ? //destream.Close();