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