Search code examples
wcfdatacontractserializer

DataContracts and DataMembers


Are there any ways to tell WCF to serialize the whole class when it returns? Do I literally have to add DataMember to every property?


Solution

  • Since .NET 3.5 SP1, you don't have to do this anymore.

    If you don't have any [DataContract] and [DataMember] attributes, the DataContractSerializer class will behave like the old XmlSerializer: it will serialize all public read/write properties that are listed in the class.

    You do lose a few things in the process though:

    • since you don't have [DataMember] attributes, you cannot define an order of the fields anymore - they'll be serialized in the order of appearance

    • you cannot omit a public property (since that would require [DataMember] on all other properties/fields)

    • you cannot define a property to be Required (that would be on the [DataMember] attribute again)

    • your class now needs to have a public, parameter-less constructor (usually not needed for data contracts)

    Read all about it in detail from Aaron Skonnard at Pluralsight.