AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > XML

利用XMLSerializer将对象串行化到XML

51自学网 2015-09-11 http://www.51zixue.net

微软已经意识到串行化数据的重要性,因此在.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();
} } }

<

 

 

 
上一篇:XML入门精解之结构与语法  下一篇:用XML和来生成动态页面