用了mvc有一段時間了,慢慢的熟悉起來了,也漸漸的發現了mvc的一些缺點,比如當我們返回 Json(new{})的時候沒辦法做到將首字母轉換成小寫、日期再序列化過后是時間戳需要到前台重新處理或者提在在對象中處理,這些都很不方便,用起來相當不舒服,所有在參考了一些其他的資料以后就重寫了這個json序列化的方法。全程沒什么難點,和自身序列化不同的地方在於放棄了微軟自帶的json序列化方法而該用了第三方的json.net的序列化框架。下面就是實現過程。
1.新建一個類CustomesJsonResult 繼承自mvc自帶的JsonResult,重寫它的ExecuteResult方法。
public class CustomsJsonResult : JsonResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } var response = context.HttpContext.Response; response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; if (ContentEncoding != null) { response.ContentEncoding = ContentEncoding; } var jsonSerizlizerSetting = new JsonSerializerSettings(); //設置取消循環引用 jsonSerizlizerSetting.MissingMemberHandling = MissingMemberHandling.Ignore; //設置首字母小寫 jsonSerizlizerSetting.ContractResolver = new CamelCasePropertyNamesContractResolver(); //設置日期的格式為:yyyy-MM-dd jsonSerizlizerSetting.DateFormatString = "yyy-MM-dd"; var json = JsonConvert.SerializeObject(Data, Formatting.None, jsonSerizlizerSetting); response.Write(json); } }
至此整個重寫已經完成(當然了你可以隨意添加自己的設置根據自己需求),剩下就是怎么使用了:
1.我們需要新建一個BaseController並繼承自Controller類。如下:
public class BaseAdminController : Controller { protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) { return new CustomsJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior }; } }
至此整個重寫和使用已經完成了,后面我們只需要在新建控制器的時候繼承自BaseController就可以了,當我們返回josn的時候就能看到們想要的結果。
網上類似的例子很多,我也參考了其它很多自戀,在此就不一一例舉了。
