Что ж, документация содержит пример использования KnownTypeAttribute. Обратите внимание, что он допускает несколько атрибутов в одном классе, поэтому вы можете идентифицировать более одного полиморфного дочернего типа.
Это довольно ограниченная функциональность, поскольку она позволяет указывать только типы, известные во время разработки, поэтому она не вписывается в мышление расширяемости и удобства обслуживания, которое обычно заставляет нас использовать полиморфизм.
AFAIR, это ограничение существует главным образом из-за ограничений в WSDL / XSD, на которые часто переводятся контракты WCF. Мы всегда должны помнить, что только 10000 * сообщений перемещаются по проводам, а не объектов . Клиент на другом конце может вообще не быть приложением .NET, поэтому для обеспечения совместимости мы должны принять эти ограничения.
Я обычно нахожу, что более статичный редизайн интерфейса сервиса часто является лучшим решением. Вы также можете рассмотреть возможность представления возвращаемого типа как System.Object, который будет переводиться в xs: any, но, очевидно, по пути вы потеряете безопасность типов.
WCF имеет расширенную опцию, которая позволяет вам делиться типами между сервером и клиентом, так что это также может быть решением для вас. Однако, если вы сделаете это, вы потеряете функциональную совместимость и множество других достоинств, поэтому тщательно обдумайте этот вариант, прежде чем выбрать его.