【问题标题】:XmlRoot without namespace can't use same ElementName for different type没有命名空间的 XmlRoot 不能对不同类型使用相同的 ElementName
【发布时间】:2014-07-01 13:57:53
【问题描述】:

我有如下的 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

我知道我可以在 XmlRoot 中添加选项 NameSpace 参数来解决这个冲突。但我想要的是获得没有任何 xmlns 的 Xml

<Result>
    <xxxx></xxxx>
</Result>

有解决办法吗?

【问题讨论】:

    标签: c# wcf serialization


    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 2016-09-16
      • 1970-01-01
      • 2012-01-25
      • 2012-07-31
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多