在c#中读取XML CDATA

本文关键字:XML CDATA 读取 | 更新日期: 2023-09-27 18:11:36

下面是来自外部服务的XML结构。它包含CDATA,然后又包含xml。我想将CDATA内容反序列化为c#对象。有人能帮我一下吗?我看了很多文章都没有找到合适的那一篇。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
  <Response xmlns=""><![CDATA[<result><Item1>Some data</Item1><Item2>Some data</Item2><Item3>Some data</Item3></result>]]></Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

CDATA中的XML下面需要反序列化。

<result><Item1>Some data</Item1><Item2>Some data</Item2><Item3>Some data</Item3></result>

在c#中读取XML CDATA

[XmlRoot("result")]
public class Result
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
    public string Item3 { get; set; }
}

使用:

Result result;
using (var xmlReader = XmlReader.Create(inputStream))
{
    xmlReader.ReadToFollowing("Response");
    xmlReader.Read(); // read CDATA tag
    using (var stringReader = new StringReader(xmlReader.Value))
    {
        var xs = new XmlSerializer(typeof(Result));
        result = (Result)xs.Deserialize(stringReader);
    }
}