我将 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/