将StreamReader响应转换为xml
将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结构更新了问题中的类。
问题出现的原因:
问题出现的原因是在将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属性。