将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
干杯
将名称空间设置为在资源上为空后工作完美。谢谢! – Mort