1:添加newtonsoft.json的引用
2:创建一个继承JsonResult的类
public class JsonNetResult : JsonResult { public JsonSerializerSettings Settings { get; private set; } public JsonNetResult() { Settings = new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss", ContractResolver = new CamelCasePropertyNamesContractResolver() }; } public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentException("context is null"); } if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException("json get method is not allowed"); } HttpResponseBase response = context.HttpContext.Response; response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType; if (this.ContentEncoding != null) { response.ContentEncoding = this.ContentEncoding; } if (this.Data == null) { return; } JsonSerializer serializer = JsonSerializer.Create(this.Settings); serializer.Serialize(response.Output, this.Data); } }
3:添加一个过滤器
public class JsonResultFileter : IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.Result is JsonResult && !(filterContext.Result is JsonNetResult)) { JsonResult jsonResult = (JsonResult)filterContext.Result; JsonNetResult netResult = new JsonNetResult(); netResult.ContentEncoding = jsonResult.ContentEncoding; netResult.ContentType = jsonResult.ContentType; netResult.Data = jsonResult.Data; netResult.JsonRequestBehavior = jsonResult.JsonRequestBehavior; netResult.MaxJsonLength = jsonResult.MaxJsonLength; netResult.RecursionLimit = jsonResult.RecursionLimit; filterContext.Result = netResult; } } public void OnActionExecuting(ActionExecutingContext filterContext) { } }
4:在Global.asax注册过滤器
//注册过滤器 GlobalFilters.Filters.Add(new JsonResultFileter());