jullin
jullin

Reputation: 633

Serializing object that inherits from List<T>

When I try to serialize this collection, the name property is not serialized.

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

Only if I create a new class (without List<t> inheritance), and define there string Name property and List<B_Button> bc = new List<B_Button>(); property I get the right result.

Upvotes: 4

Views: 903

Answers (1)

Marc Gravell
Marc Gravell

Reputation: 1062780

In many serializers (and data-binding, in fact), an object is either an entity or (exclusive) a list; having properties on a list is not commonly supported. I would refactor to encapsulate the list:

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

Also; how would you plan on representing that in JSON? IIRC the JSON array syntax doesn't allow for extra properties either.

Upvotes: 7

Related Questions