【发布时间】:2016-03-07 12:46:15
【问题描述】:
如何解析对 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 对象:
[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 结构的建议更新了问题。
【问题讨论】:
-
嗯,你的根元素是“cXML”而不是“响应”,那么你期望什么?
-
而 PResponse 应该是 Response 以匹配标签名称。
-
我在问题中期待“我想要实现的目标:”。我现在将“响应”更改为“cXML”,因为我认为它会解决问题,但它没有
-
@EranMeir 用于解析 XML 的模型类型应完全对应于 xml 模式。所以你应该至少有三个类——一个用于cXML,一个用于响应,一个用于状态。它们显然应具有适当的名称、类型和属性。您应该阅读一些 XML 反序列化教程。
-
我也尝试将其更改为“响应”,但没有帮助