使用XmlSerializer类,我想要实现以下结果的XML:
然而,该方法返回以下XML:
如何使XmlSerializer避免将命名空间前缀添加到内部元素?
提前说明:我知道子元素没有其父级的命名空间看起来很奇怪,但这是我从客户端接收到的消息形式,我需要创建一个模拟Web服务以模仿相同的行为。
<n:root xmlns:n="http://foo.bar">
<child/>
</n:root>
请注意,根元素已定义名称空间和前缀,但子元素没有。我使用以下XSLT实现了这一点:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:element name="n:root" xmlns:n="http://foo.bar">
<xsl:element name="child" />
</xsl:element >
</xsl:template>
</xsl:stylesheet>
...不过我希望能够使用.NET XmlSerializer和System.Xml.Serialization属性来代替。我创建了以下两个类:
[XmlRoot(ElementName = "root", ElementNamespace = "http://foo.bar")]
public class Root
{
[XmlElement(ElementName = "child")]
public Child Child { get; set; }
}
public class Child {}
然后我尝试使用XmlSerializerNamespaces类向XmlSerializer添加命名空间并进行序列化:
public string Foo()
{
var root = new Root { Child = new Child() };
var ns = new XmlSerializerNamespaces();
ns.Add("n", "http://foo.bar");
var s = new XmlSerializer(typeof(Root));
var sb = new StringBuilder();
var xml = XmlWriter.Create(sb);
s.Serialize(xml, root, ns);
return sb.ToString();
}
然而,该方法返回以下XML:
<n:root xmlns:n="http://foo.bar">
<n:child/>
</n:root>
如何使XmlSerializer避免将命名空间前缀添加到内部元素?
提前说明:我知道子元素没有其父级的命名空间看起来很奇怪,但这是我从客户端接收到的消息形式,我需要创建一个模拟Web服务以模仿相同的行为。