Пользовательские настройки сериализатора Json.NET для каждого типа

Я использую ApiController, который использует глобальный класс HttpConfiguration для указания параметров JsonFormatter. Я могу глобально установить параметры сериализации следующим образом:

config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;

Проблема заключается в том, что не все настройки применяются ко всем типам моего проекта. Я хочу указать пользовательские параметры TypeNameHandling и Binder для определенных типов, которые выполняют полиморфную сериализацию.

Как я могу указать JsonFormatter.SerializationSettings для каждого типа или, по крайней мере, на основе ApiController?

Ответ 1

На основе вашего комментария выше приведен пример конфигурации каждого контроллера:

[MyControllerConfig]
public class ValuesController : ApiController

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class MyControllerConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
    {
        //remove the existing Json formatter as this is the global formatter and changing any setting on it
        //would effect other controllers too.
        controllerSettings.Formatters.Remove(controllerSettings.Formatters.JsonFormatter);

        JsonMediaTypeFormatter formatter = new JsonMediaTypeFormatter();
        formatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.All;
        controllerSettings.Formatters.Insert(0, formatter);
    }
}