每种类型自定义Json.NET序列化程序设置

我正在使用ApiController,它使用全局HttpConfiguration类来指定JsonFormatter设置。 我可以非常容易地全局设置序列化设置:

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

问题是并非所有设置都适用于我的项目中的所有类型。 我想为执行多态序列化的特定类型指定自定义TypeNameHandling和Binder选项。

如何在per-type上指定JsonFormatter.SerializationSettings,或者至少在per-ApiController上指定?

根据您上面的评论,以下是每个控制器配置的示例:

 [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); } }