如何利用XMLSerializer將對(duì)象串行化到XML-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“如何利用XMLSerializer將對(duì)象串行化到XML”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何利用XMLSerializer將對(duì)象串行化到XML”這篇文章吧。

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、晉江ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的晉江網(wǎng)站制作公司

XML的魅力
   串行化XML是指為了方便存儲(chǔ)或傳輸,把一個(gè)對(duì)象的公共的域和屬性保存為一種串行格式(這里是XML格式)的過程。非串行化則是使用串行的狀態(tài)信息將對(duì)象從串行XML狀態(tài)還原成原始狀態(tài)的過程。因此,可以把串行化看作是將對(duì)象的狀態(tài)保存到流或緩沖區(qū)中的一種方法。

串行化的目的是數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)存儲(chǔ)指的是在用戶會(huì)話時(shí)保存數(shù)據(jù)。當(dāng)應(yīng)用程序關(guān)閉時(shí),數(shù)據(jù)被保存(串行化),而當(dāng)用戶回來時(shí),數(shù)據(jù)又被重新加載(非串行化)。數(shù)據(jù)轉(zhuǎn)換指將數(shù)據(jù)變換成能被另一個(gè)系統(tǒng)識(shí)別的格式。使用串行化和XML,可以很方便的進(jìn)行數(shù)據(jù)轉(zhuǎn)換。

對(duì)象中的數(shù)據(jù)可以是類、方法、屬性、私有類型、數(shù)組,在System.Xml.XmlElement或System.Xml.XmlAttribute對(duì)象中,它甚至可以是內(nèi)嵌的XML。

System.Xml.Serialization命名空間中的關(guān)鍵類是XmlSerializer。當(dāng)然在該命名空間中還包括有關(guān)XML其他方面以及SOAP相關(guān)的其他類,不過我們的重點(diǎn)是XmlSerializer類。

XmlSerializer
   XmlSerializer類提供了把對(duì)象串行化為XML文件及把XML文檔非串行化為對(duì)象的方法。它還能讓用戶指定對(duì)象如何轉(zhuǎn)化為XML。可以把將被串行化的對(duì)象的類型作為類構(gòu)造函數(shù)的參數(shù)。下面的C# 代碼說明了構(gòu)造函數(shù)的用法。

    XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));

下面是等價(jià)的VB.NET代碼:

    Dim ser As New XmlSerializer(GetType(objectToSerialize))

實(shí)際的串行化過程在XmlSerializer類的Serialize方法中實(shí)現(xiàn)。該方法允許在串行化過程中調(diào)用TextWriter、Stream和XmlWriter對(duì)象。下面的例子代碼說明了如何調(diào)用該方法。在本例中一個(gè)對(duì)象被串行化保存到本地磁盤的一個(gè)文件當(dāng)中。例子中首先是類聲明,后面緊接著是串行化源代碼。

using System;
namespace BuilderSerialization {
public class Address {
public Address() {}
public string Address1;
public string Address2;
public string City;
public string State;
public string Zip;
public string Country;
} }
using System;
namespace BuilderSerialization {
public class Author {
public Author() { }
public string FirstName;
public string MiddleName;
public string LastName;
public string Title;
public string Gender;
public Address AddressObject;
} }
namespace BuilderSerialization {
public class Book {
public Book() { }
public string Title;
public Author AuthorObject;
public string ISBN;
public double RetailPRice;
public string Publisher;
}}
using System;
using System.Xml.Serialization;
using System.IO;
namespace BuilderSerialization {
class TestClass {
static void Main(string[] args) {
Book BookObject = new Book();
XmlSerializer ser = new XmlSerializer(typeof(Book));
TextWriter writer = new StreamWriter("booktest.xml");
BookObject.Title = "Practical LotusScript";
BookObject.ISBN = "1884777767 ";
BookObject.Publisher = "Manning Publications";
BookObject.RetailPrice = 43.95;
BookObject.AuthorObject = new Author();
BookObject.AuthorObject.FirstName = "Tony";
BookObject.AuthorObject.LastName = "Patton";
BookObject.AuthorObject.Gender = "Male";
BookObject.AuthorObject.AddressObject = new Address();
BookObject.AuthorObject.AddressObject.Address1 = "1 Main Street";
BookObject.AuthorObject.AddressObject.City = "Anywhere";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject.Country = "USA";
ser.Serialize(writer, BookObject);
writer.Close();
} } }

上面的代碼把三個(gè)對(duì)象變?yōu)橐粋€(gè)對(duì)象,因此在串行化過程中產(chǎn)生一個(gè)XML文件。以下是例子程序產(chǎn)生的XML文檔:

<?xml version="1.0" encoding="utf-8"?>
<Book xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Title>Practical LotusScript</Title>
<AuthorObject>
<FirstName>Tony</FirstName>
<LastName>Patton</LastName>
<Gender>Male</Gender>
<AddressObject>
<Address1>1 Main Street</Address1>
<City>Anywhere</City>
<State>KY</State>
<Zip>40000</Zip>
<Country>USA</Country>
</AddressObject>
</AuthorObject>
<ISBN>1884777767 </ISBN>
<RetailPrice>43.95</RetailPrice>
<Publisher>Manning Publications</Publisher>
</Book>

注意串行化過程也能處理對(duì)象數(shù)據(jù)的嵌套。數(shù)據(jù)被轉(zhuǎn)換成可識(shí)別的格式,方便了數(shù)據(jù)重載(非串行化)以及向另一個(gè)系統(tǒng)的數(shù)據(jù)傳輸。在數(shù)據(jù)傳輸過程時(shí),接收方系統(tǒng)需要知道XML文件的格式(如果預(yù)先不知道的話)。因此需要提供一個(gè)XML schema文件。.NET框架中的XSD.exe工具可以為串行化XML生成一個(gè)schema文件。

下面是用VB.NET編寫的例子代碼:

Public Class Address
Public Address1 As String
Public Address2 As String
Public City As String
Public State As String
Public Zip As String
Public Country As String
End Class
Public Class Author
Public FirstName As String
Public MiddleName As String
Public LastName As String
Public Title As String
Public Gender As String
Public AddressObject As Address
End Class
Public Class Book
Public AuthorObject As Author
Public Title As String
Public ISBN As String
Public RetailPrice As Double
Public Publisher As String
End Class
Imports System.Xml.Serialization
Imports System.IO
Module Module1
Sub Main()
Dim BookObject As New Book
Dim ser As New XmlSerializer(GetType(Book))
Dim writer As New StreamWriter("booktest.xml")
With BookObject
.Title = "Practical LotusScript"
.ISBN = "1884777767 "
.Publisher = "Manning Publications"
.RetailPrice = 43.95
.AuthorObject = New Author
.AuthorObject.FirstName = "Tony"
.AuthorObject.LastName = "Patton"
.AuthorObject.Gender = "Male"
.AuthorObject.AddressObject = New Address
.AuthorObject.AddressObject.Address1 = "1 Main Street"
.AuthorObject.AddressObject.City = "Anywhere"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject.Country = "USA"
End With
ser.Serialize(writer, BookObject)
writer.Close()
End Sub
End Module

控制輸出

串行化過程生成標(biāo)準(zhǔn)的XML文件,數(shù)據(jù)成員轉(zhuǎn)換為XML元素。不過,并非所有的數(shù)據(jù)成員都變成元素,可以通過在類代碼中添加一些標(biāo)記來控制輸出的XML文件。這樣,數(shù)據(jù)成員可以變換為XML屬性而非元素,也可以簡(jiǎn)單的被忽略掉。下面的例子是一段經(jīng)過修改后的book類VB.NET代碼。

Public Class Book
Public AuthorObject As Author
Public Title As String
<System.Xml.Serialization.XmlAttribute()> _
Public ISBN As String
<System.Xml.Serialization.XmlIgnoreAttribute()> _
Public RetailPrice As Double
Public Publisher As String
End Class

這段代碼告訴系統(tǒng)在生成XML文件時(shí)把類成員ISBN作為XML屬性,同時(shí)忽略掉RetailPrice成員。這種變化可以在生成的XML文件中可以看出:

<?xml version="1.0" encoding="utf-8"?>
<Book xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ISBN="1884777767 ">
<AuthorObject>
<FirstName>Tony</FirstName>
<LastName>Patton</LastName>
<Gender>Male</Gender>
<AddressObject>
<Address1>1 Main Street</Address1>
<City>Anywhere</City>
<State>KY</State>
<Zip>40000</Zip>
<Country>USA</Country>
</AddressObject>
</AuthorObject>
<Title>Practical LotusScript</Title>
<Publisher>Manning Publications</Publisher>
</Book>

以下是相應(yīng)的C# 代碼:

public class Book {
public Book() { }
public string Title;
public Author AuthorObject;
[System.Xml.Serialization.XmlAttribute()]
public string ISBN;
[System.Xml.Serialization.XmlIgnoreAttribute()]
public double RetailPrice;
public string Publisher;
}

上面僅是稍微提了兩種標(biāo)記符號(hào)。請(qǐng)查閱.NET文檔以獲得完整的標(biāo)記符號(hào)。

非串行化
非串行化數(shù)據(jù)通過調(diào)用XmlSerializer類的Deserialize方法可以方便地實(shí)現(xiàn)。以下的VB.NET程序片斷完成上文中XML文檔的非串行化:

Dim BookObject As New Book
Dim ser As New XmlSerializer(GetType(Book))
Dim fs As New System.IO.FileStream("booktest.xml", FileMode.Open)
Dim reader As New System.XML.XmlTextReader(fs)
BookObject = CType(ser.Deserialize(reader), Book)
該程序把結(jié)果數(shù)據(jù)放入內(nèi)存?zhèn)溆谩O旅媸堑葍r(jià)的C# 代碼:
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = new System.IO.FileStream("booktest.xml",
FileMode.Open);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(fs);
Book BookObject = (Book)(ser.Deserialize(reader));

以上是“如何利用XMLSerializer將對(duì)象串行化到XML”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞名稱:如何利用XMLSerializer將對(duì)象串行化到XML-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://m.kartarina.com/article30/dicgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站策劃定制網(wǎng)站App開發(fā)網(wǎng)站制作網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
主站蜘蛛池模板: 亚欧无码精品无码有性视频| 中文字幕精品三区无码亚洲| 黄桃AV无码免费一区二区三区| 亚洲免费日韩无码系列 | 日韩视频无码日韩视频又2021 | 免费无码又爽又刺激高潮| 人妻丰满熟妇A v无码区不卡| 国产爆乳无码一区二区麻豆| 无码人妻啪啪一区二区| 久久亚洲av无码精品浪潮| 精品视频无码一区二区三区| 国产羞羞的视频在线观看 国产一级无码视频在线 | 亚洲av无码不卡久久| 18禁成年无码免费网站无遮挡| 免费一区二区无码东京热| 精品国产一区二区三区无码| 亚洲人成影院在线无码观看 | 无码精品国产va在线观看dvd| 国产亚洲美日韩AV中文字幕无码成人| 18禁免费无码无遮挡不卡网站| 狠狠躁天天躁无码中文字幕| 亚洲综合一区无码精品| 亚洲国产成人精品无码区在线观看| 精品无码国产AV一区二区三区| 久久亚洲AV无码精品色午夜| 国产午夜片无码区在线播放| 亚洲日韩精品无码专区网站 | 一级片无码中文字幕乱伦| AV无码久久久久不卡蜜桃| 亚洲爆乳无码一区二区三区| 国产亚洲精久久久久久无码AV| 粉嫩大学生无套内射无码卡视频| 亚洲VA中文字幕无码一二三区| 久久亚洲精品无码观看不卡| 久久久精品无码专区不卡| 国产在线无码精品无码| 成人麻豆日韩在无码视频| 亚洲av无码成人精品区一本二本 | 亚洲AV成人无码网天堂| 99久久人妻无码精品系列蜜桃| 精品无码人妻一区二区免费蜜桃|