2016-08-19 92 views
0

我遇到了將XML反序列化爲列表對象的問題。反序列化運行時沒有錯誤,但資源列表爲空,並且我知道在XML中返回了一個資源。它似乎只是沒有正確的反序列化。將XML反序列化爲對象時的空列表

我使用以下代碼來反序列化

  var ser = new XmlSerializer(typeof(SearchResult)); 
      var test = result.Content.ReadAsStringAsync(); 
      var t = (SearchResult)ser.Deserialize(result.Content.ReadAsStreamAsync().Result); 

變量「測試」上面的代碼的第2行是等於

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<ns3:searchResult total="1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns3="ers.ise.cisco.com"> 
<resources> 
<resource id="76a4b0f2-64e2-11e6-9f15-00505688a404" name="5555884552"> 
<link rel="self" href="https://servername123:9060/ers/config/guestuser/76a4b0f2-64e2-11e6-9f15-00505688a404" type="application/xml"/> 
</resource> 
</resources> 
</ns3:searchResult> 

因此,我期望在資源列表中獲取一個ExistingWifiAccountDto。但我不知道。它是空的。我究竟做錯了什麼?

的對象映射的類都低於

[XmlRoot(ElementName = "searchResult", Namespace = "ers.ise.cisco.com")] 
public class SearchResult 
{ 
    public SearchResult() 
    { 
     Resources = new List<ExistingWifiAccountDto>(); 
    } 

    [XmlArray("resources")] 
    [XmlArrayItem("resource", typeof(ExistingWifiAccountDto))] 
    public List<ExistingWifiAccountDto> Resources { get; set; } 
} 

public class ExistingWifiAccountDto 
{ 
    public ExistingWifiAccountDto() 
    { 
    } 

    [XmlAttribute("id")] 
    public string Id { get; set; } 
    [XmlAttribute("name")] 
    public string Name { get; set; } 
    [XmlElement("link")] 
    public LinkDto Link { get; set; } 
} 

public class LinkDto 
{ 
    public LinkDto() 
    { 
    } 

    [XmlAttribute("rel")] 
    public string Rel { get; set; } 
    [XmlAttribute("href")] 
    public string Href { get; set; } 
    [XmlAttribute("type")] 
    public string Type { get; set; } 
} 

回答

0

你必須命名空間設置爲空字符串爲「資源」陣列,因爲它不是在你的情況繼承。然後這應該流向子元素。

嘗試改變

[XmlArray("resources")] 

[XmlArray("resources", Namespace = "")] 

這將導致它與表單屬性反序列化正確,或者,你也可以設置每個節點從「資源」下:

Form = XmlSchemaForm.Unqualified 

乾杯

+0

將名稱空間設置爲在資源上爲空後工作完美。謝謝! – Mort