If the class is the base class, adding it to the contract is not enough, because how the serialization assembly can "know" about all the derived classes? You really need to add one more kind of attribute,
System.Runtime.Serialization.KnownTypeAttribute
, one per really used terminal derived class. Please see:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx[
^].
By the way, it's good to add
[DataConract]
attribute with your unique namespace parameter.
—SA