As mentioned, most properties must have both a getter and setter; the main exception to this is lists – for example:
private readonly List<Foo> bar = new List<Foo>();
public List<Foo> Bar {get { return bar; } } // works fine
which will work fine; however, if XmlSerializer
finds a setter – it demands that it is public; the following will not work:
public List<Foo> Bar {get; private set;} // FAIL
Other reasons it might not serialize:
- it isn’t public with get and set (or is
readonly
for a field) - it has a
[DefaultValue]
attribute, and is with that value - it has a public
bool ShouldSerializeFoo()
method that returned false - it has a public
bool FooSpecified {get;set;}
property or field that returned false - it is marked
[XmlIgnore]
- it is marked
[Obsolete]
Any of these will cause it not to serialize