[MVC__JsonNet] Newtonsoftはフロントエンドjsonを返すというデータ形式の問題を解決します

1. Application_Startの最初の行を追加します

GlobalFilters.Filters.Add(new JsonNetActionFilter());

2、JsonNetActionFilter

システムの使用;
System.Collections.Generic; を使用します。
System.Linq を使用します。
System.Web を使用します。
System.Web.Mvc を使用します。

名前空間Test.App_Start 
{ 
    パブリック クラス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  voidOnActionExecuting(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 
            { 
                // 循環参照を無視します。Errorに設定すると、循環参照が発生したときにエラーが報告されます(より標準化されたErrorに設定することをお勧めします) 
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore、

                DateFormatString = " yyyy-MM-dd HH:mm:ss "// 日付のフォーマット。デフォルトのフォーマットも適切ではありません

                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
                 // キャメルケースにプロパティの先頭に小文字で名前を付けます
            }; 
        } 
        public JsonSerializerSettings Settings { get ; private  set ;} 

        public  override  void ExecuteResult(ControllerContext context)
        { 
            if(context == null 

                throw  newArgumentNullException(" context " ); 

            ifthis .JsonRequestBehavior == JsonRequestBehavior.DenyGet

                 && string .Equals(context.HttpContext.Request.HttpMethod、" GET " 、StringComparison.OrdinalIgnoreCase))

                throw  new InvalidOperationException(" JSON GET is not allowed " ); 

            HttpResponseBaseレスポンス = context.HttpContext.Response; 

            response.ContentType = string .IsNullOrEmpty(this .ContentType)?application / json "this .ContentType; 

            ifthis .ContentEncoding!= null 

                response.ContentEncoding = this .ContentEncoding; 

            ifthis .Data == null 

                return ; 

            var scriptSerializer = JsonSerializer.Create(this .Settings); 

            scriptSerializer .Serialize(response.Output、this .Data); 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/kikyoqiang/p/12730197.html