欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C#序列化與反序列化詳解

什么是序列化以及如何實(shí)現序列化?

序列化是通過(guò)將對象轉換為字節流,從而存儲對象或將對象傳輸到內存,數據庫或文件的過(guò)程。主要用途是保存對象的狀態(tài),包括對象的數據,以便能夠在需要是重建對象。反向過(guò)程稱(chēng)為 反序列化。

如上圖所示,對象 object 被序列化為 流,其中不僅包含數據、還包含對象類(lèi)型的相關(guān)信息,如版本、區域性和程序集名稱(chēng)。然后可以將此流中的內容存儲到數據庫、文件或內存中。

序列化的用途:

通過(guò)序列化,可以執行如下操作:通過(guò) Web 服務(wù)將對象發(fā)送到遠程應用程序、在域之間傳遞對象、以 XML 字符串的形式傳遞對象通過(guò)防火墻、跨應用程序維護安全性或用戶(hù)專(zhuān)屬信息。

讓對象可序列化:

需要具有對象、包含已序列化對象的一個(gè)流,以及一個(gè) Fromatter。

System.Runtime.Serialization 包含序列化和反序列化對象所必須的類(lèi)。

將 SerializableAttribute 特性應用于某個(gè)類(lèi)型,以表示此類(lèi)型的實(shí)例可以被序列化,如果對沒(méi)有 SerializableAttribute 特性的類(lèi)型進(jìn)行序列化,則會(huì )引發(fā)異常。

如果想讓類(lèi)中的某個(gè)字段不可序列化,可以使用 NonSerializedAttribute 特性。

序列化的三種類(lèi)型--二進(jìn)制、XML、JSON

可以使用二進(jìn)制 binary 或 XML 進(jìn)行序列化,在 二進(jìn)制序列化中,所有內容都會(huì )被序列化,且性能也很好,使用二進(jìn)制編碼來(lái)生成精簡(jiǎn)的序列化,可以用于基于存儲或socket的網(wǎng)絡(luò )流。

XML 序列化可提高可讀性,以及對象共享和使用的靈活性,XML 序列化將對象的公共字段和屬性或方法的參數和返回值序列化成符合特定 XML 格式的流,

System.Xml.Serialization 包含序列化和反序列化 XML 所需要的類(lèi)

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

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

1.BinaryFormatter

保存成二進(jìn)制數據流.用法示例:

using System.IO;using System.Runtime.Serialization.Formatters.Binary;[Serializable]//如果要想保存某個(gè)class中的字段,必須在class前面加個(gè)這樣attribute(C#里面用中括號括起來(lái)的標志符)public class Person{public int age;public string name;[NonSerialized] //如果某個(gè)字段不想被保存,則加個(gè)這樣的標志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);//反序列化得到的是一個(gè)object對象.必須做下類(lèi)型轉換stream.Close();Console.WriteLine(person.age + person.name + person.secret);//結果為18tom.因為secret沒(méi)有有被序列化.}

2.SoapFormatter

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

把文件名改為person.xml

另外就是添加名稱(chēng)空間:using System.Runtime.Serialization.Formatters.Soap;
這個(gè)名稱(chēng)空調對就的程序集有時(shí)VS沒(méi)有自動(dòng)引用.你必須手動(dòng)去引用.選中project,右擊選擇Add Reference.在.NET的標簽下選擇

System.Runtime.Serialization.Formatters.Soap.然后點(diǎn)OK.

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

3.XmlSerializer

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

實(shí)例1:

添加名稱(chēng)空間:

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);}

指定 XML 標簽的名字

[XmlRoot(department)]public class Department { public string DeptName { get; set; }
[XmlElement("extra")] public DeptExtraInfo DeptExtraInfo { get; set; }}

通過(guò)在 XmlRoot、XmlElement 后面加上一個(gè)括號即可實(shí)現,其中XmlRoot用于指定“根”,也就是XML的最上一層的Tag

指定 XML 標簽的屬性

[XmlRoot("department")]public class Department { public string DeptName { get; set; } = "研發(fā)部";
[XmlAttribute("timestamp")] public int Timestamp = 10;}

Timestamp就成為了department這個(gè)根節點(diǎn)的timestamp屬性。

實(shí)例2:

public class Book { public String title; } public void ReadXML() { // First write something so that there is something to read ... var b = new Book { title = "Serialization Overview" }; var writer = new System.Xml.Serialization.XmlSerializer(typeof(Book)); var wfile = new System.IO.StreamWriter(@"c:\temp\SerializationOverview.xml"); writer.Serialize(wfile, b); wfile.Close(); // Now we can read the serialized book ... System.Xml.Serialization.XmlSerializer reader = new System.Xml.Serialization.XmlSerializer(typeof(Book)); System.IO.StreamReader file = new System.IO.StreamReader( @"c:\temp\SerializationOverview.xml"); Book overview = (Book)reader.Deserialize(file); file.Close(); Console.WriteLine(overview.title); }

傳統方法生成xml:(超鏈接)

C#在WINForm程序中創(chuàng )建XML文件

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
序列化與反序列化 - BinaryFormatter二進(jìn)制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)
序列化
C#序列化與反序列化學(xué)習筆記
C#對象與XMl文件之間的相互轉換
C#對象序列化與反序列化
C# 序列化(Serialize)與反序列化(Deserialize)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久