Custom MediaTypeFormatter, почему IKeyValueModel и не мой тип модели?

я пытаюсь сделать собственную реализацию 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();

Но тогда я хотел бы сохранить оба, как я могу указать, какой из них я хочу использовать?

С уважением.

6
задан vtortola 29 May 2012 в 09:57
поделиться