Десериализовать XML в список <T>с помощью атрибута XmlRootAttribute - PullRequest
2 голосов
/ 22 марта 2012

У меня есть класс с именем Car, со свойством LicencePlate, когда я сериализую список с помощью XmlRootAttribute Cars, созданный XML будет

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

код для сериализации это

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

но когда я буду десериализовать этот XML, произойдет ошибка, потому что у класса нет атрибута 'Cars'.

кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Если сомневаетесь, сделайте это правильно:

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

Эта оболочка должна знать, как правильно сериализовать / десериализовать.

0 голосов
/ 28 января 2016

Попробуйте:

Класс машины:

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

Ваш класс XML:

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

Приветствия.

0 голосов
/ 22 марта 2012

Вам необходимо десериализовать объект, используя тот же XmlSerializer, который вы использовали для его сериализации. Обычно вы определяете структуру XML в самом классе, используя XmlElementAttribute и соответствующие атрибуты сериализации XML.

Если по какой-то причине вам необходимо переопределить корневой элемент при сериализации объекта, вам необходимо переопределить корневой элемент в другом направлении.

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

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