2

像这样反序列化 xml 的最简单方法是什么:

<root>
    <item id="1"/>
    <item id="2"/>
    <item id="3"/>
</root>
4

3 回答 3

6

实际上,这是可能的 -这里的答案显示了如何。只需将属性定义为数组,但使用注释XmlElement

public class Item
{
    [XmlAttribute("id")]
    public int Id { get ;set; }

    [XmlText]
    public string Name { get; set; }
}

[XmlRoot("root")]
public class Root
{
    [XmlElement("item")]
    public Item[] Items { get;set;}
}
于 2013-04-23T16:46:57.527 回答
3
List<string> items = XDocument.Parse("the xml")
                         .Descendants("item")
                         .Select(item => item.Attribute("id").Value).ToList();

使用 XDocument!

于 2013-02-08T09:03:40.970 回答
0

最好的方法是解析xml。

反序列化它需要 XmlSerializer 支持的方案,使用 XDocument 来解析它。

下面是一个序列化的例子:

定义类

public class item
{
    [XmlAttribute("item")]
    public string id { get; set; }
}

序列化它

var xs = new XmlSerializer(typeof(item[]));
xs.Serialize(File.Open(@"c:\Users\roman\Desktop\ser.xml", FileMode.OpenOrCreate), new item[] { new item { id = "1" }, new item { id = "1" }, new item { id = "1" } });

结果:

<?xml version="1.0"?>
<ArrayOfItem xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <item item="1" />
  <item item="1" />
  <item item="1" />
</ArrayOfItem>

如您所见,它使用特殊的 xml 模式,使您的 xml 无法解析,这意味着您必须手动解析 xml,使用 XDocument 或 XmlDocument,或者先使用 XmlSerializer 序列化数据,然后反序列化它。

于 2013-02-08T09:02:11.727 回答