time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > .net > ASP.NET MVC > ASP.NET MVC中JsonResult返回的日期值问题处理

ASP.NET MVC中JsonResult返回的日期值问题处理

时间:2013-04-14 15:56 点击:3071次 字体:[ ]




最近开始用MVC做项目,在使用 JsonResult返回数据的时候,日期被反射成了/Date 1233455这种格式,遍查网上都是在客户端使用JS来处理这个问题的,这样的话,就需要在每一个涉及到日期的地方都做一次转换后,才能用来使用。

  于是我通过反编译Controller抽象类以及JsonResult类后发现:

  jsonresult中处理对象到JSON字符串的方法: 

  1. public override void ExecuteResult(ControllerContext context) 
  2.     { 
  3.         if (context == null
  4.         { 
  5.             throw new ArgumentNullException("context"); 
  6.         } 
  7.         if ((this.JsonRequestBehavior == JsonRequestBehavior.DenyGet) && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
  8.         { 
  9.             throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed); 
  10.         } 
  11.         HttpResponseBase response = context.HttpContext.Response; 
  12.         if (!string.IsNullOrEmpty(this.ContentType)) 
  13.         { 
  14.             response.ContentType = this.ContentType; 
  15.         } 
  16.         else 
  17.         { 
  18.             response.ContentType = "application/json"
  19.         } 
  20.         if (this.ContentEncoding != null
  21.         { 
  22.             response.ContentEncoding = this.ContentEncoding; 
  23.         } 
  24.         if (this.Data != null
  25.         { 
  26.             JavaScriptSerializer serializer = new JavaScriptSerializer(); 
  27.             response.Write(serializer.Serialize(this.Data)); 
  28.         } 
  29.     } 

在这个方法里使用的是JavaScriptSerializer这个来序列化对象到JSON。

于是我自定义了一个类,继承JSONRESULT类

并将上面的方法从写 ,用newton.json替换javascriptSerializer

替换代码如下:

  1. if (this.Data != null
  2.         { 
  3.             IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); 
  4.         timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
  5.             response.Write(JsonConvert.SerializeObject(this.Data, Newtonsoft.Json.Formatting.Indented, timeFormat, x);); 
  6.         } 

这样处理了日期的JSON序列化。

然后再重新定义一个Controller,命名为 JsonController,且设置为抽象类。

然后重写方法:

  1. protected internal virtual JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) 
  2.     return new JsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior }; 

将 JsonResult改为我们继承JSONResult并重写了ExecuteResult方法的类,就大工告成了!

以后只要JsonResult涉及到返回日期的,就可以让控制器继承我们自定义的这个类,由此解决日期问题。

 

以上只解决了日期JSON后在JS中使用显示的问题,未解决日期参与运算的问题,但是根据我目前的经历,JS中日期参与预算的时间还比较少,所以能解决用于显示的问题,就很OK了,

ASP.NET MVC还有很多好玩的特性,大家一起摸索吧!

 

转自;http://www.cnblogs.com/chongsha/archive/2013/04/14/3019990.html



本文地址 : http://www.fengfly.com/plus/view-212428-1.html
标签: ASP.NET MVC JsonResult
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: