国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#序列化與反序列化(Serialize,Deserialize)實例詳解

2020-01-24 01:46:47
字體:
來源:轉載
供稿:網友

本文實例講述了C#序列化與反序列化(Serialize,Deserialize)實現方法。分享給大家供大家參考。具體分析如下:

如果要保存運行程序過程的數據要么保存到數據庫中,要么新建一個普通的文件,然后把數據保存進去.但是這兩者有個缺點就是,不能把原有數據的結構也保存進去.比如一個類中的字段值保存進去后再讀取出來必須再解析下才行.序列化技術讓你省去了解析的過程.保存后再讀取時直接得到一個class

序列化的方式有三種:BinaryFormatter,SoapFormatter,XmlSerializer

1.BinaryFormatter

保存成二進制數據流.用法示例:

using System.IO;using System.Runtime.Serialization.Formatters.Binary;[Serializable]//如果要想保存某個class中的字段,必須在class前面加個這樣attribute(C#里面用中括號括起來的標志符)public class Person{public int age;public string name;[NonSerialized] //如果某個字段不想被保存,則加個這樣的標志public string secret;}

序列化:

classProgram{ staticvoid Main(string[] args){Person person = newPerson();person.age = 18;person.name = "tom";person.secret = "i will not tell you";FileStream stream =newFileStream(@"c:/temp/person.dat",FileMode.Create);BinaryFormatter bFormat =newBinaryFormatter();bFormat.Serialize(stream, person);stream.Close();}

反序列化:

classProgram{staticvoid Main(string[] args){Person person = newPerson();FileStream stream =newFileStream(@"c:/temp/person.dat",FileMode.Open);BinaryFormatter bFormat =newBinaryFormatter();person = (Person)bFormat.Deserialize(stream);//反序列化得到的是一個object對象.必須做下類型轉換stream.Close();Console.WriteLine(person.age + person.name + person.secret);//結果為18tom.因為secret沒有有被序列化.}

2.SoapFormatter

把數據保存成xml文件.里面除了保存的內容還有些額外的Soap信息.它的用法和BinaryFormatter一樣.只要把BinaryFormatter都替換成SoapFormatter就行.

把文件名改為person.xml

另外就是添加名稱空間:using System.Runtime.Serialization.Formatters.Soap;
這個名稱空調對就的程序集有時VS沒有自動引用.你必須手動去引用.選中project,右擊選擇Add Reference.在.NET的標簽下選擇

System.Runtime.Serialization.Formatters.Soap.然后點OK.

補充:SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分布式的環境中交換信息的簡單的協議,是一個基于XML的協議,它包括四個部分:SOAP封裝(envelop),封裝定義了一個描述消息中的內容是什么,是誰發送的,誰應當接受并處理它以及如何處理它們的框架;SOAP編碼規則(encoding rules),用于表示應用程序需要使用的數據類型的實例; SOAP RPC表示(RPC representation),表示遠程過程調用和應答的協定;SOAP綁定(binding),使用底層協議交換信息。

3.XmlSerializer

也是保存成XML文件.但沒有其他額外信息.另外它只能保存public類型的字段.而其他兩種類型能保存所以類型的字段.
這里仍使用上面的Person類.

添加名稱空間:

using System.IO;using System.Xml.Serialization;

序列化:

classProgram{ staticvoid Main(string[] args){Person person = newPerson();person.age = 18;person.name = "tom";person.secret = "i will not tell you";FileStream stream =newFileStream(@"c:/temp/xmlFormat.xml",FileMode.Create);XmlSerializer xmlserilize = newXmlSerializer(typeof(Person));xmlserilize.Serialize(stream, person);stream.Close();}

反序列化:

classProgram{staticvoid Main(string[] args){Person person = newPerson();FileStream stream =newFileStream(@"c:/temp/xmlFormat.xml",FileMode.Open);XmlSerializerxmlserilize = newXmlSerializer(typeof(Person));person = (Person)xmlserilize.Deserialize(stream);stream.Close();Console.WriteLine(person.age + person.name + person.secret);}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黎川县| 克拉玛依市| 星子县| 炎陵县| 长治市| 龙里县| 陇西县| 洛浦县| 平乐县| 肇东市| 瓮安县| 肥城市| 高平市| 东宁县| 三明市| 岳西县| 庆阳市| 吉隆县| 都江堰市| 正镶白旗| 木兰县| 宜兰市| 永年县| 上栗县| 井研县| 沾益县| 岳西县| 吉林市| 东丰县| 康定县| 泸水县| 石林| 乌兰察布市| 余庆县| 乐安县| 岳西县| 大名县| 广宁县| 博野县| 鹤岗市| 阿拉善左旗|