我有一个格式如下的XML:http://pastie.org/1311506(因为注释解析器删除了标签,所以不在此处插入)。
使用以下代码对此XML进行了实现/反序列化:
[XmlRoot("products")]
public class Products
{
[XmlElement("label")]
public string Label { get; set; }
[XmlArray("cars")]
[XmlArrayItem("car")]
public Car[] Cars { get; set; }
}
public class Car
{
[XmlAttribute("name")]
public string Name { get; set; }
}
...
var products = new Products
{
Label = "1",
Cars = new[]
{
new Car {Name = "BMW"},
new Car {Name = "Volvo"}
}
};
var serializer = new XmlSerializer(typeof(Products));
var writer = new StringWriter();
serializer.Serialize(writer, products);
Console.WriteLine(writer);
我需要一个名为<cars>
的{{1}}节点的附加属性(如此处:http://pastie.org/1311514)。我该怎么办?
换句话说,如何定义数据类(Products和Car以及其他可能的必要)以解析第二个pastie链接中显示的格式的XML?
答案 0 :(得分:4)
没有简单的方法可以做到这一点,因为对于集合,XmlSerializer
忽略所有成员,它只序列化集合的项目。但是,如果您只想反序列化它并忽略type
属性,那么这不是问题:将忽略未知属性。
如果需要获取type
的值,可以声明一个不是集合但包含集合的类。这样的事情:
public class Cars
{
[XmlElement("car")]
public Car[] Items { get; set; }
[XmlAttribute("type")]
public string Type { get; set; }
}
在Products
课程中,只需使用Cars
属性声明Cars
类型的XmlElement
属性:
[XmlRoot("products")]
public class Products
{
[XmlElement("label")]
public string Label { get; set; }
[XmlElement("cars")]
public Cars Cars { get; set; }
}