Если вы хотите использовать XmlSerializer, вам нужен базовый класс, а не интерфейс.
XmlInclude - это всего лишь один из способов сообщить сериализатору о возможных реализациях.Другой подход состоит в том, чтобы фактически передавать включенные типы в сериализатор.
Просто перечислите все типы в вашем приложении, которые являются производными от вашего базового класса (с помощью отражения), и передайте их в сериализатор в виде массива известных типов:
var serializer = new XmlSerializer(myBaseType, arrayOfConcreteImplementations);
точно так же, как вы можете сделать с DataContractSerializer: второй параметр - это коллекция известных типов, которые вы можете найти с помощью отражения), но, используя его, вы сможете поддерживать интерфейсы ...