2012-03-21 39 views
2

我有一個名爲汽車類,它有一個叫LicencePlate, 當我序列列表以及XmlRootAttribute汽車性能,創建的XML是反序列化XML列出<T>與XmlRootAttribute

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

序列化是代碼

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

但是當我將反序列化這個XML發生錯誤,因爲這個類沒有'Cars'屬性。

有人可以幫助我嗎?

+0

您是否使用相同的代碼進行反序列化? – 2012-03-21 20:56:59

回答

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

您需要使用與序列化它相同的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; 
+1

但xml不是由我生成的,誰會生成它不知道標記名稱,所以我想知道一個簡單的方法來更改此標記名稱 – 2012-03-21 21:21:23

+0

您可以只將XML作爲XML文檔打開並讀取名稱的根標籤? – 2012-03-21 21:51:31

0

試試這個:

Car類:

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

你的XML類:

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

乾杯。