DataContractSerializer поддерживает все, что поддерживает XmlSerializer, но обратное неверно. Но если тип декорируется с помощью [DataContract], он полностью переключается на новую модель программирования DataContract, полностью отказываясь от поддержки типов [Serializable], IXmlSerializable и т. Д., Которые в противном случае он имел бы.
Так что ваша магия [XmlInclude] работает, только если вы используете ASMX и традиционный XmlSerializer. Если вы используете DataContractSerializer, вы должны делать известные типы, а XML-измы, такие как [XmlInclude] и атрибуты XML, просто не поддерживаются. Вы все еще можете использовать XmlSerializer вместо DataContractSerializer, если хотите, хотя; все, что вам нужно сделать, это украсить службу или операцию, которую вы хотите переключить на XmlSerializer, с помощью [XmlSerializerFormatAttribute.]
Надеюсь, это поможет!