C# - 从HTTP POST响应创建类好评一览(XML)

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(); 
      } 
    } 

在我班上的任何错了吗?

+0

你需要证明你使用的反序列化的代码。 – Enigmativity

+0

@Enigmativity:我已添加我的代码来反序列化我的问题。谢谢 – Hans

+0

你提到它失败了,但有什么例外?你能告诉我们例外情况和它失败的路线吗? –

你的第一个模型是正确的差不多。你只是缺少一个简单的提示[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