2010-11-05 46 views
4

當我試圖序列化這個集合時,name屬性沒有被序列化。序列化繼承對象列表<T>

public class BCollection<T> : List<T> where T : B_Button 
{  
    public string Name { get; set; } 
} 


BCollection<BB_Button> bc = new BCollection<B_Button>(); 

bc.Name = "Name";// Not Serialized! 

bc.Add(new BB_Button { ID = "id1", Text = "sometext" }); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string json = serializer.Serialize(bc); 

只有當我創建一個新類(不List<t>繼承),並定義有串Name財產和財產List<B_Button> bc = new List<B_Button>();我得到正確的結果。

回答

6

在許多串行器(和數據綁定,其實),對象是要麼實體(不包括)的列表;在上有屬性列表通常不受支持。我將重構爲封裝名單:

public class Foo<T> { 
    public string Name {get;set;} 
    private readonly List<T> items = new List<T>(); 
    public List<T> Items { get { return items; } } 
} 

也;你打算如何在JSON中表現這一點? IIRC JSON數組語法不允許額外的屬性或者

+0

我只是用它來傳遞數據到客戶端(scriptcontrol),在那裏我反序列化它並檢索數據。 – jullin 2010-11-05 12:51:27