views:

114

answers:

2

I have this class:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }
}

If MyList is null when MySerializableClass is serialized, I need to have it null when it's deserialised too, but the XmlSerializer always initializes it when it deserialises my class.

Is there a way to avoid it initializing null properties?

MyList is not even recorded in the serialized file when it's null. When I load it with null values, and save it again, MyList is not null anymore, it's serialized as a List<> with 0 items, but not null.

Thanks.

More info:

An IsDeserializing property is not viable due to some code restrictions in the structure of the class

+1  A: 

This looks like a bug...

Even if you try to mark the property as nullable, it doesn't seem to work.

[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }

It serializes the MyList property as follows :

<MyList xsi:nil="true" />

So the XML clearly indicates that the list is null, but after deserialization, it is still initialized to an empty list...

If you replace List<MyObject> with MyObject[], it works fine (even without IsNullable = true), but it's probably not what you want...

You should probably report this on Connect.

Thomas Levesque
Once you've reported the bug, edit your question to include the URL of the bug report. That will allow others to vote for the bug.
John Saunders
A: 

Don't use Auto-Implemented Properties if you need a null there. use e.g.

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 
leeeroy
Doesn't fix the problem, try it.
Hans Passant
Yeah, I actually have it like this, I simplified it for the example, but thanks for the suggestion.
Carlo