使用XMLSerializer类持久化数据

ZDNet软件频道 时间:2009-02-04 作者:Builder.com |  我要评论()
本文关键词:软件
微软在 .NET Framework 中通过System.Runtime.Serialization和System.Xml.Serialization提供了序列化功能,从这里我们可以看到微软已经承认了持久化数据的需要。

提供方向

序列化过程输出标准的 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));


本文作者:Tony Patton 的职业生涯开始于应用程序开发员,并已经获得了 Java、VB、Lotus 和 XML 认证,以支持其知识。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134