2012-04-24 30 views
5

我有以下XML反序列化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。

我需要设置一些魔法属性才能使它起作用吗?

+0

如果上面是你有XML,那么它是无效的,我很惊讶,这是反序列化的。 – Tejs 2012-04-24 18:46:21

回答

12

你应该改变我的地图如下。 XmlArrayXmlArrayItem是魔法属性

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

辉煌,完美运作。如果有人知道这些属性的好教程,以及它们如何工作,我将不胜感激。我找到的都是非常简单的复制/粘贴。 – Toodleey 2012-04-24 19:40:27

+0

仍然非常相关。今天让我抓住了大约2个小时。无法弄清楚。非常感谢 – 2018-01-23 17:02:39

1

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

2

相反的XmlElement的,请尝试:

[XmlArray("Properties")] 

...名单上的<>属性。

+0

XML区分大小写,属性!=属性 – bjoern 2013-04-05 21:14:53