[MVC__JsonNet] Newtonsoft solves the data format problem of returning front-end json

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

 

Guess you like

Origin www.cnblogs.com/kikyoqiang/p/12730197.html