2009-11-25 86 views
1

我有一個非常基本的類,它是子類的列表,以及一些摘要數據。 XmlSerializer不會序列化我的類中的所有內容

[Serializable] 
public class ProductCollection : List<Product> 
{ 
    public bool flag { get; set; } 
    public double A { get; set; } 
    public double B { get; set; } 
    public double C { get; set; } 
} 

...

// method to save this class 
private void SaveProductCollection() 
{ 
    // Export case as XML... 
    XmlSerializer xml = new XmlSerializer(typeof(ProductCollection)); 
    StreamWriter sw = new StreamWriter("output.xml"); 
    xml.Serialize(sw, theCollection); 
    sw.Close(); 
} 

當我打電話SaveProductCollection()我得到如下:

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Product> 
    <InputType>1</InputType> 
    </Product> 
    <Product> 
    <InputType>1</InputType> 
    </Product> 
</ArrayOfProduct> 

請注意,我有基本類型:List<Product>。但是,我沒有任何的類屬性:標誌,A,B,C

難道我做錯了什麼?這是怎麼回事??

UPDATE感謝您的答覆。我不知道這是通過設計。我已經轉換爲BinaryFormatter(代替二進制序列化),它奇妙地工作。

回答

7

msdn

問:爲什麼不序列化集合類的所有屬性?

一個:當檢測到任何了IEnumerable或ICollection接口XmlSerializer的只序列集合中的元素。此行爲是設計使然。唯一的解決方法是將自定義集合重新分爲兩個類,其中一個暴露包含純集合類型之一的屬性。

0

首先,在製作自己的收藏類型時,您應該繼承System.Collections.ObjectModel.Collection<T>,這將允許您覆蓋InsertItem和其他方法以獲得對收藏的完全控制。

要回答你的問題,XmlSerializer處理集合類型不同序列化集合中的項目。它不會序列化任何屬性(例如,List<T>.Capacity)。

你可以將你的屬性不同的類型將包含屬性或集合。

您也可以嘗試使用attributes that control XML serialization,但我不知道他們是否會有所幫助。

-3

嘗試將XmlAttribute添加到您的屬性中,以便將它們序列化爲屬性。 類似於:

[XmlAttribute("flag")] 
public bool flag { get; set; } 
+1

-1:根本不起作用。 – 2011-02-21 19:03:25

相關問題