将xml反序列化为类,遇到列表<>的问题

时间:2012-04-24 18:40:30

标签: c# .net xml deserialization xmlserializer

我有以下XML

<map version="1.0">
    <properties>
        <property name="color" value="blue" />
        <property name="size" value="huge" />
        <property name="texture" value="rugged" />
    </properties>
</map>

我正在尝试编写可以将其反序列化的类,这就是我所拥有的:

[XmlRoot("map")]
public class MyMap
{
    [XmlAttribute("version")]
    public decimal Version { get; set; }
    [XmlElement("properties")]
    public List<MyProperty> Properties { get; set; }
}

public class MyProperty
{
    [XmlAttribute("name")]
    public string Name { get; set; }
    [XmlAttribute("value")]
    public string Value { get; set; }
}

问题是我似乎无法读取属性列表,我只得到一个条目,它在Name和Value中都为null。

我需要设置一些神奇属性才能让它发挥作用吗?

3 个答案:

答案 0 :(得分:12)

您应该更改MyMap,如下所示。 XmlArrayXmlArrayItem是神奇的属性

[XmlRoot("map")]
public class MyMap
{
    [XmlAttribute("version")]
    public decimal Version { get; set; }
    [XmlArray("properties")]
    [XmlArrayItem("property")]
    public List<MyProperty> Properties { get; set; }
}

答案 1 :(得分:2)

尝试:

而不是XmlElement
[XmlArray("Properties")]
列表上的

...&lt;&gt;属性。

答案 2 :(得分:1)

找到解决方案的一种方法是在代码中填充对象,然后将其序列化为xml,并查看架构的外观。您也可以使用xsd.exe自动生成类。