The DataContractSerializer was created taking into account the philosophy of the "first code" - it displays most programming languages well (records, lists), and it does not process all XML constructs (such as attributes or out-of-order elements, for example) for performance reasons.
WCF (svcutil) still supports the use of XmlSerializer, which can handle AFAIK of all XML constructs. svcutil must create a contract using XmlSerializer if the DataContractSerializer cannot process it.
source
share