2016-11-11 84 views
0

我想分析下面的XML文本类的反对解析XML文本类在C#

XML:

<?xml version="1.0" encoding="UTF-8"?><data><Error><![CDATA[No Error]]></Error></data> 

类:

 public class AAA 
     { 
      public BBB data; 
     } 

     public class BBB 
     { 
      public string Error; 
     } 

代码:

XmlSerializer serializer = new XmlSerializer(typeof(DUserInfo)); 
         using (StringReader reader = new StringReader(xmlText)) 
         { 
          AAA info = (AAA)(serializer.Deserialize(reader)); 
         }//using 

错误:

There is an error in XML document (1, 40). 
<data xmlns=''> was not expected. 

回答

4
{ 
"?xml": { 
    "@version": "1.0", 
    "@encoding": "UTF-8" 
}, 
"data": { 
    "Error": { 
     "#cdata-section": "No Error" 
    } 
} 
} 

是JSON不是XML,所以你必须反序列化JSON作为(不是XML)来Object

使用NewtonSoft.Json解析此文本格式的dll。

或者...

或者您可以将JSON转换成实际valid xml第一,然后将其转换为对象。

你也可以尝试一些在线JSON到XML转换器:
(结果传递给AAA info = (AAA)(serializer.Deserialize(reader));

例导致:http://www.utilities-online.info/xmltojson/#.WCVnky2LQrg

<?xml version="1.0" encoding="UTF-8" ?> 
    <?xml> 
     <@version>1.0</@version> 
     <@encoding>UTF-8</@encoding> 
    </?xml> 
    <data> 
     <Error> 
      <#cdata-section>No Error</#cdata-section> 
     </Error> 
    </data> 

PS:请检查您的类结构太。

正确的Json会。

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <Error> 
     <cdata-section>No Error</cdata-section> 
    </Error> 
</data> 

你们班会是这样的。

[XmlRoot(ElementName="Error")] 
public class Error { 
    [XmlElement(ElementName="cdata-section")] 
    public string Cdatasection { get; set; } 
} 

[XmlRoot(ElementName="data")] 
public class Data { 
    [XmlElement(ElementName="Error")] 
    public Error Error { get; set; } 
} 

您可以以这种方式将您的xml解除对象。

string xmlText = "your xml"; 
XmlSerializer serializer = new XmlSerializer(typeof(Data)); 
    using (StringReader reader = new StringReader(xmlText)) 
    { 
     Data info = (Data)(serializer.Deserialize(reader)); 
    } 

你在这条线上做错了。

XmlSerializer serializer = new XmlSerializer(typeof(DUserInfo)); 
+1

我希望你不介意编辑。感觉最好只是将这些额外信息添加到您的答案中,因为它只是扩展了您所说的内容...... –

+0

@ VC.One感谢您的编辑,它的良好精神。这将有助于OP。 –

+0

@viveknuna我编辑了问题 – SajjadZare