C# 在具有名称空间前缀的元素中创建不带名称空间前缀的XML元素
使用XmlSerializer类,我希望在XML中实现以下结果:C# 在具有名称空间前缀的元素中创建不带名称空间前缀的XML元素,c#,.net,xml,xml-namespaces,xmlserializer,C#,.net,Xml,Xml Namespaces,Xmlserializer,使用XmlSerializer类,我希望在XML中实现以下结果: <n:root xmlns:n="http://foo.bar"> <child/> </n:root> 然后我尝试将名称空间添加到XmlSerializer,并使用XmlSerializerNamespaces类对其进行序列化: public string Foo() { var root = new Root { Child = new Child() }; va
<n:root xmlns:n="http://foo.bar">
<child/>
</n:root>
然后我尝试将名称空间添加到XmlSerializer,并使用XmlSerializerNamespaces类对其进行序列化:
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避免向内部元素添加名称空间前缀
inb4:我知道子元素没有其父元素的名称空间看起来很奇怪,但这就是我从客户端收到的消息的形状,我需要创建一个模仿相同行为的模拟web服务。像这样更改
根
类应该可以做到:
[XmlRoot(ElementName = "root", Namespace = "http://foo.bar")]
public class Root
{
// note empty namespace here
[XmlElement(ElementName = "child", Namespace = "")]
public Child Child { get; set; }
}
我一直在寻找这一个我自己,我几乎得到了它,但过去了。。。我指定了child的Namespace=null,但它不起作用,所以我继续尝试其他事情。妈的,这么简单:)谢谢。
<n:root xmlns:n="http://foo.bar">
<n:child/>
</n:root>
[XmlRoot(ElementName = "root", Namespace = "http://foo.bar")]
public class Root
{
// note empty namespace here
[XmlElement(ElementName = "child", Namespace = "")]
public Child Child { get; set; }
}