将XML反序列化为对象时的空列表

问题描述:

我遇到了将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; } 
} 

你必须命名空间设置为空字符串为“资源”阵列,因为它不是在你的情况继承。然后这应该流向子元素。

尝试改变

[XmlArray("resources")] 

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

这将导致它与表单属性反序列化正确,或者,你也可以设置每个节点从“资源”下:

Form = XmlSchemaForm.Unqualified 

干杯

+0

将名称空间设置为在资源上为空后工作完美。谢谢! – Mort