将StreamReader响应转换为xml

7 浏览
0 Comments

将StreamReader响应转换为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();// <---- 这行代码导致了问题    
                        XmlSerializer serializer = new XmlSerializer(typeof(CXML));    
                        Obj_response = (CXML)serializer.Deserialize(ms);// <------ 不起作用
                        return true;
                    }
}

响应:



 

   
   WebOrder 69


PResponse对象:

[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){
// 在成功请求时执行某些操作
}
else{
// 将响应文本写入日志
}

我还尝试过这个


根据建议,我已根据XML结构更新了问题中的类。

0
0 Comments

问题出现的原因:

问题出现的原因是在将StreamReader的响应转换为XML时,需要将XML反序列化为对象。然而,在给定的代码示例中,缺少了对XML的反序列化步骤。

解决方法:

要解决这个问题,可以按照以下步骤进行操作:

1. 首先,需要创建一个XmlSerializer对象,该对象将用于将XML反序列化为对象。在给定的代码示例中,使用了cXML类作为反序列化的目标类型。

2. 然后,需要创建一个StreamReader对象,该对象将用于读取XML文件。在给定的代码示例中,使用了path作为XML文件的路径。

3. 接下来,使用XmlSerializer对象的Deserialize方法将XML反序列化为对象。在给定的代码示例中,使用了reader作为StreamReader对象,并将反序列化的结果存储在obj变量中。

4. 最后,关闭StreamReader对象。

在给定的代码示例中,还提供了用于定义反序列化对象的类的代码。cXML类是根类,它包含一个名为PResponse的属性,该属性用于存储反序列化后的XML的内容。PResponse类包含一个名为Status的属性和一个名为PlanJobID的属性,它们分别用于存储XML中的Status和JobID元素的内容。

通过使用上述的代码和类定义,我们可以成功将StreamReader的响应转换为XML,并将其反序列化为对象。在这个过程中,我们可以通过调用obj.PResponse.Status.Code来访问XML中的code属性。

0