How to make sure that my object can be serialized in an
orderly fashion?
Making sure that my object kan be serialized is simple, we just
add the [Serializable] attribute to it.
[Serializable]
public abstract class Element {
...
}
However, since my object has a reference to its Parent object,
serializing it will most likely result in a cyclic, never ending,
recursion. Fail.
Enter the DataContract.
[Serializable]
[DataContract(IsReference = true)]
public abstract class Element {
...
}
By applying it to my class, it enables serialization and
deserialization with, for instance, the DataContractSerializer. I
simply apply the [DataMember] attributes to all members I want to
serialize, and voilá, I get a nice and clean, reference enabled,
serialization.
But, you might ask, how does this work with the fancy List
implementation we did?
Simple, there's a [CollectionDataContract] attribute available
for that. That ensures that my List gets serialized to exactly
that, and not a stupid array.
Next up: What happens on deserialization.