В аналогичном сценарии в прошлом мы использовали объектно-ориентированный подход и создали новый класс, который расширяется от основного класса.
Чтобы помочь вам достичь наследования с помощью DataContractSerializer, проверьте KnownTypeAttribute
В одном из ваших комментариев к вашему вопросу,
Если один и тот же класс реализует несколько интерфейсов, определенные элементы данных могут относиться только к одному из интерфейсов.
Если это так в вашем сценарии, то, возможно, ваши контракты на обслуживание данных должны раскрывать только интерфейсы, а не класс?
Например, если у вас есть такой класс:
[DataContract]
public class DataObject : IRed, IBlue
тогда вместо того, чтобы ваш операционный контракт раскрыл DataObject, у вас есть два операционных контракта, один для IRed и один для IBlue.
Это устраняет необходимость в настраиваемом коде сериализации.