XmlRoot без пространства имен не может использовать одно имя ElementName для другого типа

У меня есть объекты WCF, как показано ниже

[XmlRoot("Result")]
 public class Result0:IXmlSerializable
 {
 public XmlSchema GetSchema() { return null; }
 public void ReadXml(XmlReader reader) { xxx; }
 public void WriteXml(XmlWriter writer) { xxx; }
 }

 [XmlRoot("Result")]
 public class Result1:IXmlSerializable
 {
 public XmlSchema GetSchema() { return null; }
 public void ReadXml(XmlReader reader) { xxx; }
 public void WriteXml(XmlWriter writer) { xxx; }
 }

когда я создам это приложение WCF, я получу ниже ошибки

InvalidOperationException: The top XML element 'Result' from namespace '' references distinct types

Я знаю, что я могу добавить параметр NameSpace в XmlRoot для разрешения этого конфликта. Но я хочу получить Xml без каких-либо xmlns

<result>
 
</result>

Есть ли решение для этого?

1 ответ

public static XmlDocument RemoveXmlns(XmlDocument doc)
 {
 XDocument d;
 using (var nodeReader = new XmlNodeReader(doc))
 d = XDocument.Load(nodeReader);

 d.Root.Descendants().Attributes().Where(x => x.IsNamespaceDeclaration).Remove();

 foreach (var elem in d.Descendants())
 elem.Name = elem.Name.LocalName;

 var xmlDocument = new XmlDocument();
 using (var xmlReader = d.CreateReader())
 xmlDocument.Load(xmlReader);

 return xmlDocument;
 }

 public static XmlDocument RemoveXmlns(String xml)
 {
 XDocument d = XDocument.Parse(xml);
 d.Root.Descendants().Attributes().Where(x => x.IsNamespaceDeclaration).Remove();

 foreach (var elem in d.Descendants())
 elem.Name = elem.Name.LocalName;

 var xmlDocument = new XmlDocument();
 xmlDocument.Load(d.CreateReader());

 return xmlDocument;
 }

licensed under cc by-sa 3.0 with attribution.