简体   繁体   English

XML使用属性反序列化C#数组

[英]XML Deserialize C# Array with attributes

I have been trying to solve this my self but not finding out. 我一直试图解决这个问题,但没有发现。

I have an XML which includes array of responseElementList 我有一个XML,其中包含responseElementList数组

<responseElementList name="something">
<valueList name="NAT_TEXT">XXX</valueList>
<value name="XXX_MAIN">NONE</value>
<value name="XXX_SEC">NONE</value>
<value name="XXX_XXX">NO</value>
<value name="XXX">YES</value>
<value name="XXX_NET">NO</value>
</responseElementList>

and I am trying to deserialize it with 我试图用它反序列化它

    public class responseElementList
    {
        [XmlAttribute("name")]
        public String name { get; set; }

        [XmlElement("valueList")]
        public ValueModel valueList { get; set; }

        [XmlElement("value")]
        public List<ValueModel> value { get; set; }
    }

    public class ValueModel
    {
        [XmlAttribute("name")]
        public String name { get; set; }

        [XmlText]
        public String Value { get; set; }
    }

I am always getting an empty list with this deserialization. 我总是通过这个反序列化获得一个空列表。 ( valueList populates just fine ) (valueList填充就好了)

Not seeing your de-serialization, so don't know what's wrong, but the following works: 没有看到你的反序列化,所以不知道什么是错的,但以下工作:

public class responseElementList
{
    [XmlAttribute("name")]
    public String name { get; set; }

    [XmlElement("valueList")]
    public ValueModel valueList { get; set; }

    [XmlElement("value")]
    public List<ValueModel> value { get; set; }
}

public class ValueModel
{
    [XmlAttribute("name")]
    public String name { get; set; }

    [XmlText]
    public String Value { get; set; }
}

public static T DeSerialize<T>(string xml)
{
    T result = default(T);
    using (TextReader reader = new StringReader(xml))
    {
        var ser = new XmlSerializer(typeof(T));
        result = (T)ser.Deserialize(reader);
    }
    return result;
}

void Main()
{
    var a = @"<responseElementList name='something'>
<valueList name='NAT_TEXT'>XXX</valueList>
<value name='XXX_MAIN'>NONE</value>
<value name='XXX_SEC'>NONE</value>
<value name='XXX_XXX'>NO</value>
<value name='XXX'>YES</value>
<value name='XXX_NET'>NO</value>
</responseElementList>";

    var obj = DataHelper.DeSerialize<responseElementList>(a);
    obj.Dump();
}

gives

在此输入图像描述

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

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