在 c# 中将 Xml 文本解析为类

本文关键字:文本 中将 Xml | 更新日期: 2023-09-27 18:17:19

我想将下面的 xml 文本解析为类的对象

.xml:

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

.class:

        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.

在 c# 中将 Xml 文本解析为类

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

是 JSON 而不是 XML,所以你已经反序列化为 JSON(而不是 XML(来Object

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

或者...

或者,您可以先将 JSON 转换为实际有效的 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));