代码示例
XmlSerializerNamespaces 类的实例包含的 XML 命名空间必须符合万维网联合会 (www.w3.org) 的名为“XML 中的命名空间”的规范。
XML 命名空间提供了限定 XML 文档中的 XML 元素名和 XML 属性名的方法。限定名由前缀和本地名称组成,两者之间用冒号分隔。前缀只是作为占位符使用;它被映射到指定命名空间的 URI。统一管理的 URI 命名空间和本地名称的组合生成了保证全球唯一的名称。
通过创建 XmlSerializerNamespaces 的实例,并将命名空间对添加到该对象,可指定 XML 文档中使用的前缀。
在 XML 文档中创建限定名
创建 XmlSerializerNamespaces 类的实例。
将所有的前缀和命名空间对都添加到 XmlSerializerNamespaces。
将适当的 System.Xml.Serialization 属性应用于将被 XmlSerializer 序列化为 XML 文档的每个成员或类。
可用的属性有:XmlAnyElementAttribute、XmlArrayAttribute、XmlArrayItemAttribute、XmlAttributeAttribute、XmlElementAttribute、XmlRootAttribute 和 XmlTypeAttribute。
将每个特性的 Namespace 属性设置为 XmlSerializerNamespaces 的命名空间值之一。
将 XmlSerializerNamespaces 传递给 XmlSerializer 的 Serialize 方法。
示例
下面的示例创建一个 XmlSerializerNamespaces,并将两个前缀和命名空间对添加到该对象。该代码创建用于序列化 Books 类的实例的 XmlSerializer。该代码对 XmlSerializerNamespaces 调用 Serialize 方法,从而使 XML 可以包含带前缀的命名空间。
Option Explicit
public class Price
{
[XmlAttribute(Namespace = "http://www.cpandl.com")]
public string currency;
[XmlElement(Namespace = "http://www.cohowinery.com")]
public decimal price;
}
Option Strict
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Class Run
Public Shared Sub Main()
Dim test As New Run()
test.SerializeObject("XmlNamespaces.xml")
End Sub 'Main
Public Sub SerializeObject(filename As String)
Dim mySerializer As New XmlSerializer(GetType(Books))
' Writing a file requires a TextWriter.
Dim myWriter As New StreamWriter(filename)
' Creates an XmlSerializerNamespaces and adds two
' prefix-namespace pairs.
Dim myNamespaces As New XmlSerializerNamespaces()
myNamespaces.Add("books", "http://www.cpandl.com")
myNamespaces.Add("money", "http://www.cohowinery.com")
' Creates a Book.
Dim myBook As New Book()
myBook.TITLE = "A Book Title"
Dim myPrice As New Price()
myPrice.price = CDec(9.95)
myPrice.currency = "US Dollar"
myBook.PRICE = myPrice
Dim myBooks As New Books()
myBooks.Book = myBook
mySerializer.Serialize(myWriter, myBooks, myNamespaces)
myWriter.Close()
End Sub
End Class
Public Class Books
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public Book As Book
End Class 'Books
<XmlType([Namespace] := "http://www.cpandl.com")> _
Public Class Book
<XmlElement([Namespace] := "http://www.cpandl.com")> _
Public TITLE As String
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public PRICE As Price
End Class
Public Class Price
<XmlAttribute([Namespace] := "http://www.cpandl.com")> _
Public currency As String
Public <XmlElement([Namespace] := "http://www.cohowinery.com")> _
price As Decimal
End Class
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class Run
{
public static void Main()
{
Run test = new Run();
test.SerializeObject("XmlNamespaces.xml");
}
public void SerializeObject(string filename)
{
XmlSerializer mySerializer = new XmlSerializer(typeof(Books));
// Writing a file requires a TextWriter.
TextWriter myWriter = new StreamWriter(filename);
// Creates an XmlSerializerNamespaces and adds two
// prefix-namespace pairs.
XmlSerializerNamespaces myNamespaces =
new XmlSerializerNamespaces();
myNamespaces.Add("books", "http://www.cpandl.com");
myNamespaces.Add("money", "http://www.cohowinery.com");
// Creates a Book.
Book myBook = new Book();
myBook.TITLE = "A Book Title";
Price myPrice = new Price();
myPrice.price = (decimal) 9.95;
myPrice.currency = "US Dollar";
myBook.PRICE = myPrice;
Books myBooks = new Books();
myBooks.Book = myBook;
mySerializer.Serialize(myWriter,myBooks,myNamespaces);
myWriter.Close();
}
}
public class Books
{
[XmlElement(Namespace = "http://www.cohowinery.com")]
public Book Book;
}
[XmlType(Namespace ="http://www.cpandl.com")]
public class Book
{
[XmlElement(Namespace = "http://www.cpandl.com")]
public string TITLE;
[XmlElement(Namespace ="http://www.cohowinery.com")]
public Price PRICE;
}
请参见
任务
如何:为 XML 流指定一个备用元素名
如何:将对象序列化
如何:将对象反序列化
参考
XmlSerializer 类
XmlSerializerNamespaces 类