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

标签 c# .net xml xml-serialization

我将 XmlWriter 与 Xml 序列化结合使用。我能够很好地输出 XML,但我似乎无法理解如何将 xmlns 属性包含在 XmlWriter 中。

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

    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 和序列化来实现这一点。

以下尝试也会抛出有关该 namespace 被保留的异常。

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.

最佳答案

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

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

如果您可以控制代码。

关于c# - 如何在使用 XmlWriter 执行 XmlSerialization 时添加命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614640/

相关文章:

android - 如何禁用 ListView 的 ScrollView 并随着单元格的增加增加 ListView 的高度?

c# - BigInteger 双基数幂计算 C#

c# - Outlook ItemAdd 事件针对新日历项目触发两次

c# - 4 核 PC 上的 c# 程序中的线程激活顺序

java - 如何使用 XSLT 和 Apache FOP 在 PDF 文档中生成条形图

java - 如何解决 wsdl2java 上 ObjectFactory 中的冲突?

c# - 打开另一个应用程序的系统菜单

c# - String[0] vs ToCharArray 然后 Char[0]

.net - IIS7/VS2010 下的 ASP.NET 部署为 Web 应用程序

c# - asp.net UserControl继承,base user control中的web控件都是空指针