Как использовать Json.NET в качестве десериализатора по умолчанию в приложении ASP.NET MVC 3+?

Есть много ресурсов о том, как заменить библиотеку Json.NET на стандартный сериализатор в приложениях ASP.NET MVC, но для жизни я не могу найти ни одного ресурса о том, как установить его как дескриптор по умолчанию.

Чтобы проиллюстрировать это немного, здесь некоторый код шаблона:

                              // how to use Json.NET when deserializing
                              // incoming arguments?
                                    V
public ActionResult SomeAction ( Foo foo ) {

    // this piece of code has lots of resources
    // on how to override the default Javascript serializer
    return Json(new Bar());

}

Как сообщить моему приложению использовать Json.NET при десериализации входящих параметров в действиях контроллера, скажем, из вызова jQuery AJAX?

$.ajax({
    type : 'POST',
    data : { foo : 'bar' }
});

Я пробовал адаптировать MediaTypeFormatters в свой код, отредактировав этот ресурс от Rick Strahl, но это тоже не сработало. Обратите внимание, что я не в среде WebAPI, но я ожидаю, что одно решение, работающее на нормальном Controller, должно работать (хотя и с минимальными настройками) в ApiController.

Ответ 1

Вам понадобится реализовать собственный ValueProviderFactory и удалить стандартный JsonValueProviderFactory.

Вот пример кода здесь: http://json.codeplex.com/discussions/347099, однако, прочитав комментарии, я не уверен на 100%, что он будет правильно обрабатывать словари.