Я обычно использовал объекты POCO, используя DataContractSerializer. При таком подходе DTO хранились в отдельной сборке, доступной обоим концам диалога WCF.
Мне нужно было явно использовать KnownTypes только тогда, когда в DTO было наследование. Например, если в контракте на обслуживание указан базовый класс, но я на самом деле возвращаю производный класс, мне нужно было бы явно указать наследование в конфигурации KnownType.
Это редкость в моем использовании и, как правило, не требуется.
Украсьте ваши объекты POCO атрибутами DataContract. Украсьте свойства атрибутами DataMember, а остальная часть позаботится об этом.