1. Add in the first line of Application_Start
GlobalFilters.Filters.Add(new JsonNetActionFilter());
2 、 JsonNetActionFilter
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Test.App_Start { public class JsonNetActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.Result is JsonResult && !(filterContext.Result is JsonNetResult)) { JsonResult jsonResult = (JsonResult)filterContext.Result; JsonNetResult jsonNetResult = new JsonNetResult(); jsonNetResult.ContentEncoding = jsonResult.ContentEncoding; jsonNetResult.ContentType = jsonResult.ContentType; jsonNetResult.Data = jsonResult.Data; jsonNetResult.JsonRequestBehavior = jsonResult.JsonRequestBehavior; jsonNetResult.MaxJsonLength = jsonResult.MaxJsonLength; jsonNetResult.RecursionLimit = jsonResult.RecursionLimit; filterContext.Result = jsonNetResult; } } public void OnActionExecuting(ActionExecutingContext filterContext) { } } }
3 、 JsonNetResult
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Test.App_Start { public class JsonNetResult: JsonResult { public JsonNetResult () { Settings = new JsonSerializerSettings { // Ignore the circular reference. If it is set to Error, an error will be reported when the circular reference is encountered (It is recommended to set it to Error, which is more standardized) ReferenceLoopHandling = ReferenceLoopHandling.Ignore, DateFormatString = " yyyy-MM-dd HH: mm: ss " , // Date formatting, the default format is also not good ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver () // Name the camel case in lowercase at the beginning of the property in json }; } public JsonSerializerSettings Settings { get ; private set ;} public override void ExecuteResult (ControllerContext context) { if (context == null ) throw new ArgumentNullException("context"); if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) throw new InvalidOperationException("JSON GET 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; var scriptSerializer = JsonSerializer.Create(this.Settings); scriptSerializer.Serialize(response.Output, this.Data); } } }