繁体   English   中英

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

[英]Empty List when deserializing XML to Object

我在将XML反序列化为带有列表的对象时遇到问题。 反序列化运行没有错误,但是“资源”列表为空,并且我知道XML中返回了一种资源。 似乎只是没有正确反序列化。

我正在使用以下代码反序列化

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

上面代码的第2行上的变量“ test”等于

<?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; }
}

您必须将“ resources”数组的命名空间设置为空字符串,因为在您所处的情况下它不会被继承。 然后应该向下流到子元素。

尝试改变

[XmlArray("resources")]

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

这将导致它正确反序列化,或者,您也可以使用Form属性从“资源”向下设置每个节点:

Form = XmlSchemaForm.Unqualified

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM