将StreamReader响应转换为xml

时间:2016-03-07 12:46:16

标签: c# xml

我如何解析对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 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>

PResponse obj:

[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( xml.Status.code == 200){
// something to happen on successful request
}
else{
// write the response text to log
}

我也尝试过this

我已根据XML类应完全对应XML结构的建议更新了问题。

1 个答案:

答案 0 :(得分:-2)

您可以尝试这种方法:

反序列化xml:

XmlSerializer serializer = new XmlSerializer(typeof(cXML));

StreamReader reader = new StreamReader(path);
var obj = (cXML)serializer.Deserialize(reader);
reader.Close();

对象定义:

[Serializable]
[XmlRoot("cXML")]
public class cXML
{
    [XmlElement("Response")]
    public PResponse PResponse { get; set; } 
}


[Serializable]
public class Status
{
    [XmlAttribute("code")]
    public string Code { get; set; }

    [XmlAttribute("text")]
    public string Text { get; set; }
}

[Serializable]
public class PResponse
{
    [XmlElement("Status")]
    public Status Status { get; set; }

    [XmlElement("JobID")]
    public string PlanJobID { get; set; }
}