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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

转:使用XMLSerializer类持久化数据

發布時間:2023/11/30 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:使用XMLSerializer类持久化数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
軟在 .NET Framework 中通過System.Runtime.Serialization和System.Xml.Serialization提供了序列化功能,從這里我們可以看到微軟已經承認了持久化數據的需要。System.Runtime.Serialization提供了開發自定義序列化解決方案的框架。System.XML.Serialization命名空間提供了以 XML 持久化對象的基本功能。下面讓我們近距離看一下如何使用這一方法。

XML 的普通要求

XML 序列化是將一個對象的公有屬性(property)和域(field)轉換到一個序列化格式(在這里是 XML)用于存儲或傳輸的過程。反序列化是從 XML 輸出中按照對象的原始狀態重新創建對象的過程。因此,你可以將序列化看作是一種將對象狀態保存到一個流或緩沖區的方法。

序列的兩個常用的地方是數據持久化和數據交換。持久化指在用戶的會話間保存數據的過程。當應用程序關閉時數據被存儲(序列化),當用戶回來時數據被重新裝載(反序列化)。數據交換是將數據提供其它系統的過程。使用序列化和 XML 可以很簡單地實現數據交換。

對象中的數據在編程語句結構中被描述為類(class)、域(field)、屬性(property)、基元類型(primitive type)、數組(array),甚至是以System.Xml.XmlElement或System.Xml.XmlAttribute形式出現的內嵌 XML。

System.Xml.Serialization命名空間的中心類是XmlSerializer。它還包含處理 XML 的各個方面的類以及使用 SOAP 的類,但是XmlSerializer是我們關注的焦點。

XmlSerializer

XmlSerializer類允許你將數據序列化到 XML 文檔并從 XML 文檔反序列化對象。它能夠使你控制對象如何被編碼到 XML。其類構造器接受對象類型作為參數以進行序列化。下面的 C# 代碼展示了如何使用構建器:

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

下面是對應的 VB.NET 代碼:

Dim ser As New XmlSerializer(GetType(objectToSerialize))

實際的序列化過程是由XmlSerializer類的Serialize 方法完成的。這個方法有六個簽名,這些簽名允許你在序列化過程中使用TextWriter、Stream 和XmlWriter對象。下面的示例代碼展示了如何使用這個方法。該例將一個對象序列化到本地磁盤驅動器上的一個文件中。下面首先列出的是使用類的代碼,然后是實際的序列化代碼:

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

這段代碼使用了三個對象,這三個對象組合成一個對象,所以序列化過程生成一個 XML 文檔。下面是由示例代碼創建的 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>

注意,序列化過程處理對象數據的嵌套。這個過程以一種有用的格式放置數據,使數據在需要時或者要與其它系統交換時容易裝載(反序列化)。在交換數據時,其它系統(如果還不知道 XML 的格式)需要知道 XML 的格式。這可以通過一個 XML schema 文件提供。.NET Framework 含有一個 schema 生成工具 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,其中數據成員作為輸出 XML 的元素,但是你可以通過在類代碼中添加屬性來定制 XML 輸出。這樣允許你創建屬性,而非 XML 元素,或者告訴系統簡單地忽略一個元素。下面重寫了 VB.NET book 類,作為一個例子提供給大家:

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

這段代碼告訴系統在生成 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 文檔查看這些標識符的一個完整列表。

反序列化

反序列化數據是一個簡單的過程,可以通過XmlSerializer類的Deserialize方法實現。下面的 VB.NET 代碼片斷將前面例子的輸出進行了反序列化處理。

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)

這段代碼將數據放到內存中以供需要時使用。下面是 C# 代碼版本:

XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStream fs = new System.IO.FileStream("booktest.xml",
FileMode.Open);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(fs);
Book BookObject = (Book)(ser.Deserialize(reader));



轉載于:https://www.cnblogs.com/xiaotaoliang/archive/2005/10/12/252921.html

總結

以上是生活随笔為你收集整理的转:使用XMLSerializer类持久化数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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