日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用XMLSerializer將對(duì)象串行化到XML

瀏覽:61日期:2022-06-03 14:11:34

    微軟已經(jīng)意識(shí)到串行化數(shù)據(jù)的重要性,因此在.NET框架中包含了命名空間System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能,為用戶自己編寫串行化方法提供了一個(gè)框架。System.Xml.Serialization命名空間提供了將一個(gè)對(duì)象串行化為XML格式的基本方法。下面我們來(lái)看看如何使用這種方法。

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)用戶回來(lái)時(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# 代碼說(shuō)明了構(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ì)象。下面的例子代碼說(shuō)明了如何調(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)記來(lái)控制輸出的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));


---------------------------------------------------
作者簡(jiǎn)介:Tony Patton是一名專業(yè)應(yīng)用程序開發(fā)人員,知識(shí)面廣泛,獲得了Java、 VB、 Lotus和XML認(rèn)證。

標(biāo)簽: XML/RSS
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久国产精品网站| 午夜天堂精品久久久久| 国产美女精品视频免费播放软件| 综合激情五月婷婷| 综合日韩在线| 亚州国产精品| 国产精品嫩草影院在线看| 国产精品一国产精品k频道56| 青青草视频一区| 国产欧美丝祙| 久久精品国产久精国产| 国产色播av在线| 久久九九99| 精品欧美一区二区三区在线观看| 久久久国产精品一区二区中文| 国产综合婷婷| 免费美女久久99| 日本久久二区| 久久一区精品| 99久久婷婷| 免费中文字幕日韩欧美| 日韩高清二区| 久久精品一区| 精品国产第一福利网站| 宅男在线一区| 亚洲精品在线国产| 另类综合日韩欧美亚洲| 一区二区三区四区日本视频| 久久精品国内一区二区三区水蜜桃| 伊人久久亚洲美女图片| 青草av.久久免费一区| 国产一区国产二区国产三区| 国产精品麻豆久久| 日韩天堂在线| 日本欧美在线看| 国产精品66| 桃色一区二区| 亚洲美女久久| 美女视频免费精品| 久久激情网站| 日本天堂一区| 美女福利一区二区三区| 亚洲专区欧美专区| 91嫩草精品| 久久国产欧美| 欧美一区精品| 欧美一区二区三区激情视频| 日韩av网站在线观看| 日韩欧美一区二区三区免费看| 蜜桃视频在线观看一区二区| 成人亚洲精品| 亚洲日本久久| 蜜桃视频在线网站| 午夜性色一区二区三区免费视频| 国产美女高潮在线| 亚洲综合激情在线| 在线精品亚洲欧美日韩国产| 久久亚洲一区| 国产精品99久久免费| 99在线|亚洲一区二区| 精品欧美日韩精品| 亚洲婷婷丁香| 三级小说欧洲区亚洲区| 日韩1区2区3区| 亚洲a在线视频| 欧美视频久久| 亚洲免费播放| av资源中文在线| 欧美精品中文字幕亚洲专区| 欧美日韩国产一区二区三区不卡| 国产麻豆精品| 免费的成人av| 亚洲一级网站| 久久99蜜桃| 亚洲人成在线影院| 欧美日韩国产高清电影| 激情综合五月| 国产日韩高清一区二区三区在线| 亚洲欧美日韩国产一区| 日韩专区精品| 开心激情综合| 91午夜精品| 美女精品网站| 久久九九精品| 电影91久久久| 国产美女撒尿一区二区| 亚洲一区国产| 日韩精品2区| 欧美日韩黄网站| 伊人国产精品| 午夜国产精品视频免费体验区| 国产91欧美| 欧美激情麻豆| 国产人成精品一区二区三| 蜜臀久久久久久久| 99riav1国产精品视频| 日韩国产激情| 国产精品久久久久久久久久10秀| **爰片久久毛片| 婷婷精品在线| 免费观看在线综合色| 欧美日韩日本国产亚洲在线| 日韩av一级| 久久久久久夜| 日韩.com| 美女视频免费精品| 国产欧美成人| 欧美日韩在线精品一区二区三区激情综合 | 精品视频高潮| 国产亚洲精aa在线看| 日韩精品欧美大片| 亚洲a级精品| 中文字幕一区二区精品区| 国产一区二区高清| 91久久久精品国产| 婷婷激情一区| 色一区二区三区四区| 久久亚州av| 麻豆精品新av中文字幕| 久久99精品久久久久久园产越南| 欧美日韩午夜电影网| 91成人福利| 国产精品视频3p| 国产激情一区| 加勒比视频一区| a国产在线视频| 精精国产xxxx视频在线播放| 电影亚洲精品噜噜在线观看| 成人在线网站| 韩日一区二区三区| 亚洲欧美网站| 免费看欧美美女黄的网站| 中文字幕成人| 国产三级一区| 成人精品国产亚洲| 日本不卡免费高清视频在线| 久久九九99| 亚洲黄色影院| 亚洲91在线| 国产精品久久久久久久免费软件 | 久久国产日韩欧美精品| 国产精品亚洲二区| 精品国产一级| 欧美日韩视频免费观看| 欧美色图国产精品| 国产精品美女久久久浪潮软件| 石原莉奈在线亚洲二区| 日韩精选在线| 精品国产中文字幕第一页| 樱桃视频成人在线观看| 亚洲天堂久久| 亚洲区欧美区| 欧美黑人做爰爽爽爽| 日韩精品专区| 日本欧洲一区二区| 国产日韩欧美一区二区三区在线观看| 国产极品嫩模在线观看91精品| 久久男人av资源站| 国产亚洲激情| 日韩激情啪啪| 国产精品久久久久久久久妇女| 欧美国产91| 自拍自偷一区二区三区| 欧美国产精品| 悠悠资源网久久精品| 国产亚洲久久| 日韩免费小视频| 亚洲精选久久| 91一区二区| 免费成人性网站| 久久亚洲道色| 亚洲欧美日韩国产一区| 久久99精品久久久野外观看| 欧美午夜精彩| 色综合视频一区二区三区日韩 | 国产亚洲永久域名| 国产精区一区二区| 99精品电影| 天堂俺去俺来也www久久婷婷| 久久中文字幕一区二区三区| 久久蜜桃精品| 91伊人久久| 久久久国产精品一区二区中文| 亚洲精品无吗| 在线一区视频观看| 日韩激情中文字幕| 免费在线小视频| 日韩中出av| 日本韩国欧美超级黄在线观看| 日韩精品a在线观看91| 99精品综合| 国产精品久久久久9999高清| 999精品在线| 国产精品v一区二区三区| 在线成人动漫av| 久久久91麻豆精品国产一区| 在线国产日韩| 999久久久国产精品| 国产欧美69| 亚洲综合不卡|