Я опубликовал это в другом месте, но я собираюсь добавить это и здесь ... Думаю, я добавлю то, что я нашел в связи с этим. Читая об атрибуте KnownType, у десериализатора должна быть причина думать, что тип, на который вы ссылаетесь с KnownType, может быть передан. Если десериализатор знает все типы в ваших контрактах данных или в параметрах вашего метода, ему не нужен ваш вонючий "KnownTypes", чтобы выполнять свою работу, и поэтому он игнорирует их. Если у вас есть "объект", определенный как тип где-то в вашем сервисе ... о-о, бедный старый десериализатор не имеет ни малейшего представления, какой тип может проходить через него, поэтому он съедает все ваши известные типы и выплевывает их клиентский прокси.
Взломать? О да. Если вы в отчаянии, это работает? Да.