我正在尝试配置一个区域,以在ASP.NET项目中为新创建的区域使用一些自定义的JSON Serializer设置。我正在编写Web API控制器。
不幸的是,我不能影响整个项目(很多旧的代码),否则我刚刚完成:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
json.SerializerSettings.Converters = new List<JsonConverter>() { new StringEnumConverter() };
但是我可以更改这个新区域,但是我认为合适。
是否可以以与上面的代码相似的方式配置这个新区域(还有其他我不希望受到影响的区域)?
- 创建一个从
JsonResult
继承的类。编写逻辑以在此类内实现所需的序列化器。 - 创建一个基本控制器类并覆盖
Json
方法以返回您的自定义JsonResult
。 - 最后,将您所在区域内部的所有控制器更改为从自定义
BaseController
继承
示例:
public abstract class BaseController : Controller
{
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new MySpecialJsonResult //Inherits from JsonResult and contains the desired serializer implementation
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior
};
}
}
public class EmployeeController : BaseController
{
public JsonResult Index()
{
//Your custom serializer will be used...
return Json(new{Text="Hello"},JsonRequestBehavior.AllowGet);
}
}