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

时间:2013-07-16 19:03:53

标签: c# asp.net-mvc asp.net-web-api json.net

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

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

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

如何在每个类型上指定JsonFormatter.SerializationSettings,或者至少在每个ApiController的基础上指定?

1 个答案:

答案 0 :(得分:12)

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

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