在使用XmlWriter执行XmlSerialization时如何添加命名空间?

时间:2009-03-05 12:52:49

标签: c# .net xml xml-serialization

我正在将XmlWriter与Xml Serialization结合使用。我可以输出XML,但是如何在XmlWriter中包含xmlns属性似乎正在逃避我。

要编写文档的开头,我使用以下内容:

    Writer.WriteStartDocument();
    Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9");

创建了我的XmlWriter后,我遍历SitemapNodes,我创建了它们并通过序列化将它们写入底层的stringbuilder:

    foreach (uk.co.andrewrea.SitemapNode node in List)
    {
        Serializer.Serialize(Writer, node);
    }

正如我所说,这工作正常,但不包括根元素的上述命名空间。每次我尝试物理写入属性xmlns时,我都会得到一个异常,即xmlns由系统保留供XML使用,所以基本上我不能使用。

我知道如何使用XmlTextWriter并使用XmlDocument类,但我需要了解如何使用XmlWriter和序列化实现此目的。

以下尝试也会抛出有关该名称空间被保留的异常。

foreach (uk.co.andrewrea.SitemapNode node in List)
{
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
      ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

      Serializer.Serialize(Writer, node, ns);
}

Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML.

1 个答案:

答案 0 :(得分:4)

您可以将命名空间添加到XmlSerialization属性,例如:

[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;

如果您可以控制代码。