Из того, что я видел, DataContractSerializer просто устанавливает нулевое значение для свойств, не найденных при десериализации. Делает обнаружение некоторых ошибок довольно хитрым - иногда я бы предпочел, чтобы он был более строгим и давал исключение.
Другой вариант, который следует рассмотреть, - это создание подкласса исходного DTO для создания нового производного класса.
Для правильной работы сериализации необходимо указать доступные производные классы для супертипа с атрибутом:
[DataContract]
[KnownType(typeof(DerivedDTO))]
public class OriginalDTO
В коде, где вы используете дополнительное свойство, вам нужно будет привести объект к DerivedDTO, чтобы получить доступ к свойству (для этого я использую ключевое слово as и проверяю, является ли полученная ссылка нулевой, прежде чем использовать его) *