A: 

First of all, when making your own collection types, you should inherit System.Collections.ObjectModel.Collection<T>, which will allow you to override InsertItem and other methods to gain complete control over the collection.

To answer your question, XmlSerializer handles collection types differently to serialize the items in the collection. It will not serialize any properties (eg, List<T>.Capacity).

You could move your properties to a different type that would contain the properties or the collection.

You could also try using the attributes that control XML serialization, but I'm not sure whether they'll help.

SLaks
+4  A: 

Following msdn:

Q: Why aren't all properties of collection classes serialized?

A: The XmlSerializer only serializes the elements in the collection when it detects either the IEnumerable or the ICollection interface. This behavior is by design. The only work around is to re-factor the custom collection into two classes, one of which exposes the properties including one of the pure collection types.

jarek
A: 

Try adding XmlAttribute to your properties, so they'll be serialized as attributes. Something like:

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