That is because you are adding items in the constructor. A common approach in deserializers when processing a list is basically:
- read the list via the getter
- if the list is null: create a new list and assign via the property setter, if one
- deserialize each item in turn, and append (
Add) to the list
this is because most list members don’t have setters, i.e.
public List<Foo> Items {get {...}} // <=== no set
Contrast to arrays, which must have a setter to be useful; hence the approach is usually:
- deserialize each item in turn, and append (
Add) to a temporary list - convert the list to an array (
ToArray), and assign via the setter
Some serializers give you options to control this behavior (others don’t); and some serializers give you the ability to bypass the constructor completely (others don’t).