C#中的序列化和反序列化案例
序列化:是將對(duì)象的狀態(tài)存儲(chǔ)到特定存儲(chǔ)介質(zhì)的過(guò)程,也可以說(shuō)是將對(duì)象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^(guò)程。
上面的解釋是官方定義,大白話解釋就是,將對(duì)象以二進(jìn)制的方式存儲(chǔ)在文件中,如果簡(jiǎn)簡(jiǎn)單單的將一些數(shù)據(jù)或者內(nèi)容存儲(chǔ)到文件中的話,很好實(shí)現(xiàn),直接使用IO就可以,但是對(duì)象可就不一樣了,我們可以通過(guò)序列化來(lái)實(shí)現(xiàn),下面就展示一個(gè)序列化的案例:
首先新建一個(gè)Student類(lèi),需要注意的是,在類(lèi)的上方要標(biāo)識(shí)[Serializable],以表示該類(lèi)可支持序列化操作。
[Serializable] public?class?Student {public?int?Id?{?get;?set;?}public?string?Name?{?get;?set;?}public?string?Sex?{?get;?set;?}public?int?Age?{?get;?set;?}public?Student()?{?}public?Student(string?name,int?age,string?sex)?{this.Name?=?name;this.Age?=?age;this.Sex?=?sex;}public?void?Say()?{Console.WriteLine("姓名是:{0},年齡是:{1},性別是{2}",Name,Age,Sex);}}接下來(lái)寫(xiě)一個(gè)測(cè)試類(lèi)實(shí)現(xiàn)一下序列化:
????????//序列化操作????????static void TestXu(){????? ???List<Student>?slist?=?new?List<Student>();Student?stu1?=?new?Student("劉世豪",12,"男");Student?stu2?=?new?Student("李宏洋",?18,?"男");Student?stu3?=?new?Student("鐘立琦",19,"男");slist.Add(stu1);slist.Add(stu2);slist.Add(stu3); using(FileStream?fs?=?new?FileStream(@"d:/test/test.btn",FileMode.Create)){????????????BinaryFormatter?bf?=?new?BinaryFormatter();bf.Serialize(fs,slist);Console.WriteLine("序列化成功");}}執(zhí)行一下,運(yùn)行結(jié)果不出意外的話是:序列化成功,但是提醒你不要去看生成的那個(gè)文件,不信的話你就去看看。
反序列化:顧名思義就是與序列化相反,也就是從文件中將對(duì)象在還原回來(lái)。下面是代碼案例:
//反序列化操作static void TestFanXu(){????????????using(FileStream?fs?=?new?FileStream(@"d:/test/test.txt",FileMode.Open)){BinaryFormatter?bf?=?new?BinaryFormatter();List<Student>?slist?=?(List<Student>)bf.Deserialize(fs);foreach?(Student?stu?in?slist)?{Console.WriteLine(stu.Name);}}}輸出的運(yùn)行結(jié)果:
劉世豪
李宏洋
鐘立琦
這就是序列化和反序列化操作的案例。
溫馨提示
如果你喜歡本文,請(qǐng)分享到朋友圈,想要獲得更多信息,請(qǐng)關(guān)注我。
往期內(nèi)容更精彩哦~
總結(jié)
以上是生活随笔為你收集整理的C#中的序列化和反序列化案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 北京青年任知了身世 北京青年任知了简单介
- 下一篇: C#基础知识详解之【字段与属性】