2010-11-19 90 views
1

我有這樣的格式的XML:http://pastie.org/1311506(不插入它在這裏,因爲評論分析器刪除標籤)。如何將屬性添加到標有XmlArrayAttribute的集合中?

[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); 

我需要一個額外的屬性,稱爲type(如這裏:http://pastie.org/1311514<cars>節點:

此XML serealized /使用以下代碼反序列化。我該怎麼做?

換句話說,如何定義數據類(產品和汽車,如果需要也可能是其他),以便解析第二個pastie鏈接中顯示的格式的XML?

+0

「解析器刪除標籤」:不,如果你格式化爲代碼(按4個空格縮進或使用Ctrl + K) – 2010-11-19 19:08:32

回答

4

有沒有簡單的方法來做到這一點,因爲對於集合XmlSerializer忽略所有成員,它只序列化集合的項目。但是,如果您只想將其反序列化並忽略type屬性,則這不是問題:未知屬性將被忽略。

如果您需要獲得值type,則可以聲明不是集合的類,但包含該集合。類似的東西:

public class Cars 
{ 
    [XmlElement("car")] 
    public Car[] Items { get; set; } 

    [XmlAttribute("type")] 
    public string Type { get; set; } 
} 

在你Products類,只是只是一個XmlElement屬性聲明Cars類型的Cars屬性:

[XmlRoot("products")] 
public class Products 
{ 
    [XmlElement("label")] 
    public string Label { get; set; } 

    [XmlElement("cars")] 
    public Cars Cars { get; set; } 
} 
+0

謝謝Thomas。 – DNNX 2010-11-22 12:58:38