将xml文本解析为c#中的类

时间:2016-11-11 06:13:04

标签: c# xml xml-parsing

我想将xml文本解析为类

的对象

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.

1 个答案:

答案 0 :(得分: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-to-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));