【问题标题】:Deserializing xml to class, trouble with list<>将 xml 反序列化为类,list<> 出现问题
【发布时间】:2012-04-24 18:40:29
【问题描述】:

我有以下 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; }
}

问题是我似乎无法阅读属性列表,我只得到一个条目,它的名称和值都为空。

是否需要设置一些魔法属性才能使其正常工作?

【问题讨论】:

  • 如果以上是你拥有的所有 XML,那么它是无效的,我很惊讶它完全在反序列化。

标签: c# .net xml deserialization xmlserializer


【解决方案1】:

您应该如下更改 MyMap。 XmlArrayXmlArrayItem 是魔法属性

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

【讨论】:

  • 太棒了,效果很好。如果有人知道关于这些属性以及它们如何工作的好教程,我将不胜感激。我发现的只是非常简单的复制/粘贴。
  • 仍然非常相关。今天抓了我大约2个小时。想不通。非常感谢
【解决方案2】:

用 XmlElement 代替,试试:

[XmlArray("Properties")]

...在 List 属性上。

【讨论】:

  • XML 区分大小写,Properties != properties
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2018-10-30
    • 2011-08-12
    相关资源
    最近更新 更多