C# - 从HTTP POST响应创建类好评一览(XML)
问题描述:
我想收到HTTP POST效应初探这是XML格式,并具有列表内使用C# - 从HTTP POST响应创建类好评一览(XML)
类这是来自服务器XML:
<list_bulk_response>
<status_code>1100</status_code>
<status_text>OK</status_text>
<list_request>
<request_bulk>
<request_status_code>1100</request_status_code>
<request_status_text>OK</request_status_text>
<id>1</id>
</request_bulk>
<request_bulk>
<request_status_code>1100</request_status_code>
<request_status_text>OK</request_status_text>
<id>2</id>
</request_bulk>
....
....
....
</list_request>
</list_bulk_response>
在许多源搜索之后,我试试这个:
public class list_bulk_response :
{
public string status_code { get; set; }
public string status_text { get; set; }
public list_request list_request { get; set; }
}
public class list_request
{
public List<request_bulk> request_bulk { get; set; }
}
public class request_bulk
{
public string request_status_code { get; set; }
public string request_status_text { get; set; }
public string id{ get; set; }
}
这:
public class list_bulk_response : KenjaloApi
{
public List<list_request> list_request { get; set; }
}
public class list_request
{
public request_bulk request_bulk { get; set; }
}
public class request_bulk
{
public string request_status_code { get; set; }
public string request_status_text { get; set; }
public string request_date { get; set; }
public string transaction_id { get; set; }
public string priority { get; set; }
public string sender { get; set; }
public string dr_url { get; set; }
}
但仍然未能收到列表里面XML
UPDATE 这是我的代码进行反序列化:
public static T deserializeXMLtoClass<T>(string input) where T : class
{
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));
using (StringReader sr = new StringReader(input))
{
return (T)ser.Deserialize(sr);
sr.Close();
}
}
在我班上的任何错了吗?
答
你的第一个模型是正确的差不多。你只是缺少一个简单的提示[XmlElement("request_bulk")]
var t = deserializeXMLtoClass<list_bulk_response>(xmlstring);
public class list_bulk_response
{
public string status_code { get; set; }
public string status_text { get; set; }
public list_request list_request { get; set; }
}
public class list_request
{
[XmlElement("request_bulk")]
public List<request_bulk> request_bulk { get; set; }
}
public class request_bulk
{
public string request_status_code { get; set; }
public string request_status_text { get; set; }
public string id { get; set; }
}
+0
这已经工作了,谢谢 – Hans
答
你可以做这样的事情
using (Stream httpResponseStream = response.Content.ReadAsStreamAsync().Result)
{
XDocument responseXML = XDocument.Load(httpResponseStream);
IEnumerable<XElement> listBulkResponseElements = responseXML.Root.
Elements("list_bulk_response");
foreach (XElement lbre in listBulkResponseElements)
{
list_bulk_response lbr = new list_bulk_response();
request_bulk rb = new request_bulk();
// Access the values with Element(valueName).value like this
lbr.statuscode = lbre.Element("statuscode").value;
lbr.statustext = lbre.Element("statustext").value;
// For nested elements you need to add extra Element(valueName)s like this
rb.request_status_code = Root.Element("list_request").Elements("request_bulk").
Element("request_status_code").value;
// Notice that "Element" is used where you only have one of them like with your
// "list_bulk_response" and "Elements" is used where you have multiple ones
// like with "request_bulk"
// And so on
// Now you need to decide what do do with your objects
}
}
+0
感谢您的回答,我先试试它... – Hans
你需要证明你使用的反序列化的代码。 – Enigmativity
@Enigmativity:我已添加我的代码来反序列化我的问题。谢谢 – Hans
你提到它失败了,但有什么例外?你能告诉我们例外情况和它失败的路线吗? –