利用XMLSerializer将对象串行化到XML

ZDNet软件频道 时间:2009-02-04 作者:Builder.com |  我要评论()
本文关键词:xml 软件
微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空以提供串行化功能,为用户自己编写串行化方法提供了一个框架。
本文译自Builder.com,未经许可请勿转载

微软已经意识到串行化数据的重要性,因此在.NET框架中包含了命名空间System.Runtime.Serialization和System.xml.Serialization以提供串行化功能,为用户自己编写串行化方法提供了一个框架。System.xml.Serialization命名空间提供了将一个对象串行化为xml格式的基本方法。下面我们来看看如何使用这种方法。

xml的魅力

串行化xml是指为了方便存储或传输,把一个对象的公共的域和属性保存为一种串行格式(这里是xml格式)的过程。非串行化则是使用串行的状态信息将对象从串行xml状态还原成原始状态的过程。因此,可以把串行化看作是将对象的状态保存到流或缓冲区中的一种方法。

串行化的目的是数据存储和数据转换。数据存储指的是在用户会话时保存数据。当应用程序关闭时,数据被保存(串行化),而当用户回来时,数据又被重新加载(非串行化)。数据转换指将数据变换成能被另一个系统识别的格式。使用串行化和xml,可以很方便的进行数据转换。

对象中的数据可以是类、方法、属性、私有类型、数组,在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();
} } }


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