使用XmlRootAttribute </t>将XML反序列化为List <t>

时间:2012-03-21 20:54:05

标签: c# xml-serialization xmlserializer xml-deserialization

我有一个叫做Car的类,有一个名为LicencePlate的属性, 当我使用XmlRootAttribute Cars序列化List时,创建的XML是

<Cars>
<Car>
 <LicencePlate></LicencePlate>
</Car>
<Cars>

序列化的代码是

XmlSerializer ser = new XmlSerializer(ListCars.GetType(), new XmlRootAttribute("Cars"));

但是当我反序列化这个XML时会出错,因为该类没有'Cars'属性。

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

如有疑问,请妥善处理:

[XmlRoot("Cars"), XmlType("Cars")]
public class SomeWrapper {
    [XmlElement("Car")]
    public List<Car> Cars { get { return cars; } }
    private readonly List<Car> cars = new List<Car>();
}

这个包装器应该知道正确序列化/反序列化。

答案 1 :(得分:0)

试试这个:

汽车类:

public class Car
{
    public string LicencePlate { get; set; }
}

您的XML类:

[XmlRoot("Cars")]
public class ListCars
{
    [XmlElement("Car")]
    public List<Car> Car { get; set; }
}

干杯。

答案 2 :(得分:-1)

您需要使用与序列化它相同的XmlSerializer来反序列化对象。通常,您将使用XmlElementAttribute和相关的XML序列化属性在类本身中指定XML结构。

如果出于某种原因,在序列化对象时确实需要覆盖根元素,则需要覆盖朝向另一个方向的根元素。

var output = new MemoryStream();
LoadSerializedObjectIntoTheStream(output);

var ser = new XmlSerializer(typeof(ListCars), new XmlRootAttribute("Cars"));
var carlist = ser.Deserialize(output) as ListCars;