XmlSerializerNamespaces 类的实例所包含的 XML 命名空间必须符合万维网联合会 (W3C) 规范,即 XML 中的命名空间。
XML 命名空间提供了一种方法,用来限定 XML 文档中 XML 元素和 XML 特性的名称。 限定名由前缀和本地名称组成,两者之间用冒号分隔。 前缀仅用作占位符;它将映射到用于指定命名空间的 URI。 统一管理的 URI 命名空间和本地名称的组合能够产生保证为全局唯一的名称。
通过创建 XmlSerializerNamespaces
的实例,并向对象中添加命名空间对,可以指定在 XML 文档中使用的前缀。
在 XML 文档中创建限定名称
创建
XmlSerializerNamespaces
类的一个实例。将所有的前缀和命名空间对添加至
XmlSerializerNamespaces
。对每个由
System.Xml.Serialization
序列化为 XML 文档的成员或类应用相应的 XmlSerializer 特性。可用的特性包括:XmlAnyElementAttribute、XmlArrayAttribute、XmlArrayItemAttribute、XmlAttributeAttribute、XmlElementAttribute、XmlRootAttribute 和 XmlTypeAttribute。
将每个属性 (Attribute) 的
Namespace
属性 (Property) 设置为XmlSerializerNamespaces
的命名空间值之一。将
XmlSerializerNamespaces
传递到Serialize
的XmlSerializer
方法。
示例
下面的示例创建一个 XmlSerializerNamespaces
,并向对象添加两个前缀和命名空间对。 该代码创建了用来序列化 XmlSerializer
类实例的 Books
, 并通过 Serialize
调用 XmlSerializerNamespaces
方法,使 XML 可以包含带前缀的命名空间。
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Module Program
Public Sub Main()
SerializeObject("XmlNamespaces.xml")
End Sub
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 Module
Public Class Books
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public Book As Book
End Class
<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
<XmlElement([Namespace] := "http://www.cohowinery.com")> _
Public price As Decimal
End Class
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
public class Program
{
public static void Main()
{
SerializeObject("XmlNamespaces.xml");
}
public static void SerializeObject(string filename)
{
var 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.
var myNamespaces = new XmlSerializerNamespaces();
myNamespaces.Add("books", "http://www.cpandl.com");
myNamespaces.Add("money", "http://www.cohowinery.com");
// Creates a Book.
var myBook = new Book();
myBook.TITLE = "A Book Title";
var myPrice = new Price();
myPrice.price = (decimal) 9.95;
myPrice.currency = "US Dollar";
myBook.PRICE = myPrice;
var 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;
}
public class Price
{
[XmlAttribute(Namespace = "http://www.cpandl.com")]
public string currency;
[XmlElement(Namespace = "http://www.cohowinery.com")]
public decimal price;
}