日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML 序列化 【译】

發布時間:2025/5/22 asp.net 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML 序列化 【译】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文連接:http://www.diranieh.com/NETSerialization/XMLSerialization.htm

?

總結:

  • 介紹
  • XML 序列化示例
  • XML Schema 定義文檔
  • 通過 Attributes來控制XML 序列化
  • 重寫XML 序列化
  • XML Namespace
  • XML 序列化和XML Web Service

?

介紹

序列化是指把對象轉化為可以持續存續或者跨流程/機器傳輸的過程。它的方向過程就是反序列化,就是把把序列化以后的文件轉換為原始的對象。.NET 提供了兩種序列化的技術:二進制和XML.

?

XML 序列化

XML 序列化可以序列化一個類的公有成員和屬性 或者參數,返回XML 數據流。XML 序列化不會序列化 方法,索引,私有成員 或者只讀屬性(除了只讀集合)。因為XML是一個公開標準,XML 數據流可以被任何平臺的應用傳輸。例如: ASP.NET Web Service 用XML 序列化創建XML 數據流 從而通過網絡來傳輸數據。相反的,反序列化用這種數據流來構建對象。

不相二進制序列化,XML 數列化不會保存類型,換句話說,它不會包含數據類型。比如:在公司命名空間里有一個員工對象,這個不能保證反序列化的對象有相同的類型。

用System.Xml.Serialization.Xmlserializer 來執行XML 序列化和反序列化。最重要的方法是Serialize 和 Deserialize。

創建類的時候,你可以直接用C#或者其他.NET語言代碼來寫一個類,或者用XML Schema Definition tool(xsd.exe)根據現有的XSD來生成類。 當一個來自XSD的類序列化了,把生成的XML 依附到XML Schema。你還可以選擇用.NET Framework中的其他類 比如 XmlReader和XmlWriter, 這兩個類可以用來解析任何XML 數據流。相反的,當你想要XML 數據流滿足XML Schema 你就可以用XmlSerializer。

用XmlSerializer生成xml數據流的時候 你可以設置XML的命名空間,元素名,屬性名.....XmlSerializer 類可以更進一步的數列化對象 生成 編碼的SOAP Xml 數據流。需要注意的是,XmlSerializer 類可以生成SOAP消息和傳到XML Web Service。

?

可序列化的項目:

以下的幾點是可以被XmlSerializer序列化的:

  • 公有 可讀/可寫的屬性
  • 公有成員
  • 繼承了ICollection 或 IEnumerable的類
  • XmlElement?對象
  • XmlNode 對象
  • DataSet 對象

用XML 序列化的優勢

用XmlSerialzer有比較完整的控制勸, 比如:

  • 可以自定義成員或屬性是作為元素還是屬性
  • 可以自定義XML的命名空間
  • 假如成員/屬性的名字不合適,可以自定義元素或者屬性的名字

XML 序列化注意事項

以下是需要注意的地方:

  • 不包含類型區別和assembly信息,如果要區分類別用二進制序列化
  • 只有公有的屬性和成員可以被序列化,需要序列化非公有數據請用二進制序列化
  • 如果需要序列化一個類,那么這個類一定要有默認構造函數
  • 方法不能被序列化
  • XmlSerialzer可以序列化繼承ICollection或者IEnumerable的類

例子

以下的例子展示額怎么序列化一個簡單的類,需要注意的是類必須要有默認構造函數:

namespace XMLSerialization {[Serializable()]public class MyBasicClass{public string strPublic;public MyBasicClass( ){strPublic = "hello";}} }

?

// Serialization / Deserialization code uisng System.Xml.Serialization; ...private void btnXMLSerialization_Click(object sender, System.EventArgs e) {XMLSerializeMyBasicCObject();XMLDeSerializeMyBasicCObject(); }private void XMLSerializeMyBasicCObject() {// Create a serializable instnaceXMLSerialization.MyBasicClass ob = new XMLSerialization.MyBasicClass();// Initialize a storage medium to hold the serialized objectStream stream = new FileStream( "BasicXMLSerializa.xml", FileMode.Create, FileAccess.Write, FileShare.Write);// Serialize an object into the storage medium referenced by 'stream' object.XmlSerializer xmlserializer = new XmlSerializer( typeof(XMLSerialization.MyBasicClass) );xmlserializer.Serialize( stream, ob );// Cleanup stream.Close(); }private void XMLDeSerializeMyBasicCObject() {// Read the file back into a streamStream stream = new FileStream( "BasicXMLSerializa.xml", FileMode.Open, FileAccess.Read, FileShare.Read);// Now create a binary formatterXmlSerializer xmlserializer = new XmlSerializer( typeof(XMLSerialization.MyBasicClass) );// Deserialize the object and use itXMLSerialization.MyBasicClass ob = (XMLSerialization.MyBasicClass)xmlserializer.Deserialize( stream );Trace.WriteLine( ob.strPublic );// Cleanup stream.Close(); }

結果如下:

<?xml version="1.0"?> <MyBasicClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><strPublic>hello</strPublic> </MyBasicClass>

?

DataSet 序列化

以下展示了怎么序列化DataSet:

private void btnDataSet_Click(object sender, System.EventArgs e) {// Construct a DataSetSystem.Data.DataSet ds = new DataSet( "MyDataSet" );System.Data.DataTable dt = new DataTable( "MyDataTable" );System.Data.DataColumn dc1 = new DataColumn( "ID", typeof (int) );System.Data.DataColumn dc2 = new DataColumn( "Name", typeof (string) );dt.Columns.Add( dc1 );dt.Columns.Add( dc2 );ds.Tables.Add( dt );// Add some rowsfor (int i = 0; i < 5; i ++){DataRow row = dt.NewRow();row[0] = i;row[1] = i.ToString();dt.Rows.Add ( row );}// Now serialize the DataSetSystem.Xml.Serialization.XmlSerializer serializer = new XmlSerializer( typeof( DataSet ) );Stream stream = new FileStream( "DataSet.xml", FileMode.CreateNew);serializer.Serialize( stream, ds );// Clean up stream.Close(); }

結果如下:

<?xml version="1.0"?> <DataSet><xs:schema id="MyDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element name="MyDataSet" msdata:IsDataSet="true" msdata:Locale="en-GB"><xs:complexType><xs:choice maxOccurs="unbounded"><xs:element name="MyDataTable"><xs:complexType><xs:sequence><xs:element name="ID" type="xs:int" minOccurs="0" /><xs:element name="Name" type="xs:string" minOccurs="0" /></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><MyDataSet><MyDataTable diffgr:id="MyDataTable1" msdata:rowOrder="0" diffgr:hasChanges="inserted"><ID>0</ID><Name>0</Name></MyDataTable><MyDataTable diffgr:id="MyDataTable2" msdata:rowOrder="1" diffgr:hasChanges="inserted"><ID>1</ID><Name>1</Name></MyDataTable><MyDataTable diffgr:id="MyDataTable3" msdata:rowOrder="2" diffgr:hasChanges="inserted"><ID>2</ID><Name>2</Name></MyDataTable><MyDataTable diffgr:id="MyDataTable4" msdata:rowOrder="3" diffgr:hasChanges="inserted"><ID>3</ID><Name>3</Name></MyDataTable><MyDataTable diffgr:id="MyDataTable5" msdata:rowOrder="4" diffgr:hasChanges="inserted"><ID>4</ID><Name>4</Name></MyDataTable></MyDataSet></diffgr:diffgram> </DataSet>

?

復雜對象序列化

假如類的屬性或是成員返回復雜對象(array 或者實例,XmlSerializer會把它轉化為嵌套在xml文件里的成員,如下:

?

// Classes used in serializing. An Order object contains 0 or more Item objects namespace XMLSerialization {[Serializable]public class Item{public string strProductName;public int nProductID;public Item(){strProductName = "";nProductID = 0; }public Item( string s, int n ){strProductName = s;nProductID = n;}}[Serializable]public class Order{// Must indicate what kind of elements exist in the ArrayList. See// Controlling XML Serialization Through Attributes[XmlElement( typeof(Item) )]public ArrayList alOrders;public Order(){alOrders = new ArrayList();}[XmlInclude( typeof( Item) )]public void Add( Item i ){alOrders.Add( i );}} }

?

// The function creates an Order that contains many Items and then serializes the Order object private void btnComplexOb_Click(object sender, System.EventArgs e) {Stream stream = null;try{// Create an object that contains other objectsXMLSerialization.Order order = new XMLSerialization.Order();order.Add( new XMLSerialization.Item( "Apples", 10 ) );order.Add( new XMLSerialization.Item( "Oranges", 20 ) );order.Add( new XMLSerialization.Item( "Avocados", 30 ) );// Now serialize the classSystem.Xml.Serialization.XmlSerializer serializer = new XmlSerializer( typeof( XMLSerialization.Order ) );stream = new FileStream( "ComplexObject.xml", FileMode.Create );serializer.Serialize( stream, order );stream.Close();}catch( Exception ex ){stream.Close();Trace.WriteLine ( ex.Message );} } <?xml version="1.0"?> <Order xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><alOrders><strProductName>Apples</strProductName><nProductID>10</nProductID></alOrders><alOrders><strProductName>Oranges</strProductName><nProductID>20</nProductID></alOrders><alOrders><strProductName>Avocados</strProductName><nProductID>30</nProductID></alOrders> </Order>

?

?

?

?

?

轉載于:https://www.cnblogs.com/Jenny90/p/3593413.html

總結

以上是生活随笔為你收集整理的XML 序列化 【译】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。