问题:MVC中使用控制器返回JsonResult,如果带有日期字段的对象,浏览器接收到的json中会变成形如/Date('123123123')/格式。如何在easyui等中直接使用是个麻烦事。
解决方法:从源头开始。既然Controller控制器的Json()方法会自动转化,那我们就给它扩展一下,把格式化日期的功能替换成我们自己写的格式:
首先,我们继承JsonResult写一个类,重载他的ExcuteResult:
////// 提供自定义日期格式 Json /// public class CustomJsonResult : JsonResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } HttpResponseBase response = context.HttpContext.Response; if (Data != null) { var timeConverter = new IsoDateTimeConverter {DateTimeFormat = "yyyy-MM-dd HH:mm:ss"};//这里使用自定义日期格式,默认是ISO8601格式 response.Write(JsonConvert.SerializeObject(Data,Formatting.Indented,timeConverter)); } } }
////// 本项目所有控制器的基类,提供Json方法,用来自定义格式化日期 /// public class BaseController : Controller { protected override JsonResult Json(object data, string contentType, Encoding contentEncoding) { return new CustomJsonResult {Data = data, ContentType = contentType, ContentEncoding = contentEncoding}; } public new JsonResult Json(object data, JsonRequestBehavior jsonRequest) { return new CustomJsonResult {Data = data, JsonRequestBehavior = jsonRequest}; } public new JsonResult Json(object data) { return new CustomJsonResult {Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet}; } }
public JsonResult UserSrc() { var q = from u in db.T_User.Where(p=>!p.DelFlag) select new { UserID = u.UserID, UserName = u.UserName, RealName = u.RealName, Date=u.Date }; return Json(q); }