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

您的位置:首頁技術文章
文章詳情頁

利用XMLSerializer將對象串行化到XML

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

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

XML的魅力

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

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

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

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

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

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

    下面是等價的VB.NET代碼:

    Dim ser As New XmlSerializer(GetType(objectToSerialize))

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

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

上面的代碼把三個對象變?yōu)橐粋€對象,因此在串行化過程中產(chǎn)生一個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>

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

控制輸出

 
串行化過程生成標準的XML文件,數(shù)據(jù)成員轉(zhuǎn)換為XML元素。不過,并非所有的數(shù)據(jù)成員都變成元素,可以通過在類代碼中添加一些標記來控制輸出的XML文件。這樣,數(shù)據(jù)成員可以變換為XML屬性而非元素,也可以簡單的被忽略掉。下面的例子是一段經(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文件時把類成員ISBN作為XML屬性,同時忽略掉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>

以下是相應的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;
}

上面僅是稍微提了兩種標記符號。請查閱.NET文檔以獲得完整的標記符號。

非串行化
非串行化數(shù)據(jù)通過調(diào)用XmlSerializer類的Deserialize方法可以方便地實現(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)

該程序把結果數(shù)據(jù)放入內(nèi)存?zhèn)溆谩O旅媸堑葍r的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));


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

標簽: XML/RSS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩手机在线| 国产精品探花在线观看| 玖玖精品视频| 国产一区丝袜| 日韩精品a在线观看91| 亚洲天堂资源| 久久免费国产| 97se综合| 丰满少妇一区| 国产美女撒尿一区二区| 免费在线观看成人| 欧美va天堂在线| 美女视频黄免费的久久| 视频一区日韩| 免费观看在线综合色| 亚洲女同中文字幕| 免费视频一区三区| 日韩午夜免费| 91久久久精品国产| 91精品精品| 日本免费一区二区三区四区| 久久99国产精品视频| 久久99性xxx老妇胖精品| 精品免费在线| 开心激情综合| 美女精品久久| 麻豆精品视频在线| 欧美日韩18| 麻豆久久一区二区| 老司机精品在线| 九九99久久精品在免费线bt| 国产精品18| 久久伊人久久| 午夜av不卡| 久热精品在线| 亚洲人亚洲人色久| 日本va欧美va瓶| 欧美另类中文字幕| 国产伦乱精品| 久久亚洲国产| 免费在线观看精品| 日韩有吗在线观看| 美女被久久久| 日韩三级久久| 精品在线网站观看| 午夜视频精品| 亚洲区欧美区| 97久久超碰| 久久精品系列| 成人av二区| 国产精品中文| 福利在线免费视频| 五月婷婷亚洲| 亚洲精品动态| 精品视频免费| 蜜臀91精品一区二区三区| 日韩一区二区三区四区五区| 亚洲精品在线a| 青草av.久久免费一区| 精品一区二区三区中文字幕视频| 国产欧美亚洲一区| 国产精品毛片一区二区在线看| 欧美日一区二区| 一区二区亚洲视频| 国产精品久久久久久久久久妞妞| 日韩av免费大片| 99riav国产精品| 激情国产在线| 蜜臀av一区二区在线免费观看| 国产精品一国产精品k频道56| 国产aⅴ精品一区二区三区久久| 久久国产电影| 日本中文字幕一区二区视频| 日韩成人精品一区二区三区 | 丝袜亚洲另类欧美| 日韩一区二区三区在线看| 国产一区二区三区不卡视频网站 | 国产欧美高清视频在线| 久久精品国产久精国产爱| 国产精品777777在线播放 | 欧美精品影院| www.com.cn成人| 99精品视频在线观看免费播放| 日韩一区网站| 欧美日韩国产综合网| 国产精品www.| 免费日韩av| 桃色av一区二区| 日韩国产在线观看| 亚洲丝袜美腿一区| 九九久久电影| 狠狠久久伊人中文字幕| 99热精品久久| 国产乱码精品一区二区三区四区 | 欧美日韩夜夜| 久久久久国产| 国产精品任我爽爆在线播放| 免费在线看一区| 亚洲精品123区| 高清av不卡| 欧美日韩a区| 亚洲欧美日韩高清在线| 国产a久久精品一区二区三区| 国产精品videossex久久发布| 99热精品久久| 国模精品一区| 国产欧美69| 日日夜夜免费精品视频| 亚洲手机在线| 97精品国产一区二区三区| 成人综合一区| 久久国产精品免费一区二区三区| 伊人影院久久| 日韩中文在线电影| 久久精品国产久精国产| 97久久中文字幕| 国产精品久久久久久久久久白浆 | 伊人精品久久| 中文字幕在线免费观看视频| 美腿丝袜在线亚洲一区| 日韩视频一二区| 国产欧美日韩免费观看| 国产美女精品视频免费播放软件| 国产精品chinese| 中文字幕在线高清| 亚洲成人精选| 日本免费在线视频不卡一不卡二| 国产精品美女久久久久久不卡| 成人在线黄色| 国产精品av一区二区| 免费成人在线观看| 国产精品久久久久9999高清| 麻豆久久久久久久| 久久精品免费一区二区三区| 久久福利精品| 美女国产一区二区三区| 91精品精品| 日韩国产欧美视频| 国产成人精品一区二区三区视频 | 香蕉成人久久| 欧美日韩一区二区三区不卡视频| 国产一区二区三区日韩精品| 视频二区不卡| 一区二区日韩免费看| 亚洲视频播放| 中国字幕a在线看韩国电影| 9999国产精品| 欧美 日韩 国产精品免费观看| 中文字幕在线高清| 国产在线一区不卡| 日韩精品水蜜桃| 免费亚洲一区| 免费av一区二区三区四区| 欧美激情日韩| 奇米777国产一区国产二区| 在线亚洲一区| 中文字幕一区二区三区四区久久| 国产剧情一区二区在线观看| 亚洲综合中文| 一区二区亚洲精品| 久久高清免费| 91精品在线观看国产| 精品久久久久久久| 欧美1区二区| 国产精品成人国产| 国产欧美日韩| 欧美日韩亚洲一区在线观看| 国产精品日本| 成人午夜亚洲| 中文不卡在线| 最近国产精品视频| 丝袜av一区| 欧美一区二区性| 欧美激情亚洲| 日韩高清二区| 免费精品国产的网站免费观看| 激情久久久久久| 久久久久九九精品影院| 精品九九久久| 日本成人手机在线| 日韩三级一区| 最新亚洲一区| 精品1区2区3区4区| 视频国产精品| 免费一级欧美片在线观看网站 | 国产亚洲亚洲| 国产精品分类| 国精品产品一区| 97久久亚洲| 国产精品地址| 亚洲精品极品| 日韩毛片一区| 三级在线观看一区二区| 日韩在线一二三区| 蜜桃tv一区二区三区| 久久福利一区| 日本大胆欧美人术艺术动态| 国产乱人伦丫前精品视频| 日本在线成人| 天堂√8在线中文|