я пытаюсь сделать собственную реализацию MediaTypeFormatter
, но метод bool CanReadType(Type type)
всегда вызывается с типом IKeyValueModel
вместо моего типа MyProduct
.
В моем API-контроллере есть:
[HttpPost]
public Task Save(MyProduct product)
Я видел несколько примеров (пример 1, пример 2), а также пробовал код:
protected override bool CanReadType(Type type)
{
if (type == typeof(IKeyValueModel))
return false;
return true;
}
Но затем я получаю «MissingMethodException: для этого объекта не определен конструктор без параметров», потому что у моего типа модели нет конструктора без параметров. Похоже, поскольку CanReadType
возвращает значение false для IKeyValueModel
, фреймворк использует другой форматировщик медиа-типа.На самом деле метод OnReadFromStreamAsync
никогда не срабатывает.
Я хочу иметь возможность контролировать десериализацию моих моделей, я хочу получить реальный тип, а не IKeyValueModel
.
Это уже отлично работало в MVC с связывателями моделей.
Удачи.
ОБНОВЛЕНИЕ 29/05/2012:
Если я удалю средство форматирования json по умолчанию, оно сработает:
public static void RegisterApis(HttpConfiguration config)
{
config.Formatters.Clear();
Но тогда я хотел бы сохранить оба, как я могу указать, какой из них я хочу использовать?
С уважением.