Десериализовать XML в список‹T› с помощью XmlRootAttribute

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

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

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

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

но когда я десериализую этот XML, возникает ошибка, потому что у класса нет атрибута «Автомобили».

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


person José Arthur Ortiz Antunes    schedule 21.03.2012    source источник
comment
Используете ли вы тот же код для десериализации?   -  person Marc Gravell    schedule 22.03.2012


Ответы (3)


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

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

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

person Marc Gravell    schedule 21.03.2012

Попробуй это:

Класс автомобиля:

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

Ваш XML-класс:

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

Ваше здоровье.

person Eulogy    schedule 28.01.2016

Вам нужно десериализовать объект, используя тот же 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;
person Michael Edenfield    schedule 21.03.2012
comment
но xml создан не мной, кто будет его генерировать, не знает имя тега, поэтому я хочу знать простой способ изменить это имя тега - person José Arthur Ortiz Antunes; 22.03.2012
comment
Вы можете просто открыть XML как XML-документ и прочитать имя корневого тега? - person Michael Edenfield; 22.03.2012