将 HTTP 响应正文解析为 XML

2024-03-03

我使用此代码执行 HTTP 请求并解析 XML 响应:

using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
{
    if (resp.StatusCode == HttpStatusCode.OK)
    {
        var Obj_response = new CXML();
        var ms = new StreamReader(resp.GetResponseStream(), UTF8Encoding.UTF8);   
        t = ms.ReadToEnd();// <---- This line Caused the issue    



        XmlSerializer serializer = new XmlSerializer(typeof(CXML));    
        Obj_response = (CXML)serializer.Deserialize(ms);// <------ NOT WORKING

        return true;
    }
}

表明:

根元素缺失。

XML 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.1.009/cXML.dtd">
<cXML payloadID="Web" xml:lang="en-US" timestamp="3/7/2016 5:21:43 AM"> 
<Response>
   <Status code="200" text="OK" />
   <JobID>WebOrder 69</JobID>
</Response>
</cXML>

生成的类如下所示:

[XmlRoot(ElementName = "Status")]
public class Status
{
    [XmlAttribute(AttributeName = "code")]
    public string Code { get; set; }
    [XmlAttribute(AttributeName = "text")]
    public string Text { get; set; }
}

[XmlRoot(ElementName = "Response")]
public class Response
{
    [XmlElement(ElementName = "Status")]
    public Status Status { get; set; }
    [XmlElement(ElementName = "JobID")]
    public string JobID { get; set; }
}

[XmlRoot(ElementName = "cXML")]
public class CXML
{
    [XmlElement(ElementName = "Response")]
    public Response Response { get; set; }
    [XmlAttribute(AttributeName = "payloadID")]
    public string PayloadID { get; set; }
    [XmlAttribute(AttributeName = "lang", Namespace = "http://www.w3.org/XML/1998/namespace")]
    public string Lang { get; set; }
    [XmlAttribute(AttributeName = "timestamp")]
    public string Timestamp { get; set; }
}

我想做的是这样的:

if(Obj_response.Status.code == 200)
{
    // something to happen on successful request
}
else
{
    // write the response text to log
}

最终我发现了问题,问题出在这一行t = ms.ReadToEnd();导致流到笔记本电脑到最后导致之后什么都没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HTTP 响应正文解析为 XML 的相关文章

随机推荐