通过自定义MVC的Controller的Json转换器解决日期序列化格式问题

来源:互联网 发布:淘宝活动宝贝名称12以 编辑:程序博客网 时间:2024/05/12 23:19

今日,在MVC框架下使用EasyUI的datagrid加载数据时,服务端返回的Json日期格式为 /Date(1433088000000+0800)/ ,需要客户端进一步转换,而且也不符合EasyUI常用的日期格式要求,为此,对MVC框架下的Controller做了一些研究,发现通过对Controller的Json方法进行扩展就可以解决该问题,而且可以通过进一步自定义序列化类,满足任何类型的数据的序列化格式要求。

要实现该目标,需要完成三个步骤的工作:

1、创建Controller的派生类,引入自定义JsonResult

2、创建JsonResult的派生类,实现Json日期格式的自定义实现

3、所有需要实现自定义日期序列化格式的控制器,需继承于上述Controller的派生类

具体代码实现示例如下:

/// <summary>/// 通过重载ExecuteResult方法,实现自定义序列化日期的实现/// </summary>public class VMEJsonResult : JsonResult{    public override void ExecuteResult(ControllerContext context)    {        if (context == null)        {            throw new ArgumentNullException("context");        }        HttpResponseBase response = context.HttpContext.Response;        if (this.Data != null)        {            JsonSerializerSettings setting = new JsonSerializerSettings();            // 设置日期序列化的格式            setting.DateFormatString = "yyyy-MM-dd HH:mm:ss";            response.Write(JsonConvert.SerializeObject(Data, setting));        }    }}/// <summary>    /// 通过创建Controller的派生类来引入自定义的Json实现    /// </summary>public class VMEController : Controller{    protected override JsonResult Json(object data, string contentType, Encoding contentEncoding)    {        return new VMEJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding };    }    public new JsonResult Json(object data, JsonRequestBehavior jsonRequest)    {        return new VMEJsonResult { Data = data, JsonRequestBehavior = jsonRequest };    }    public new JsonResult Json(object data)    {        return new VMEJsonResult { Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet };    }}/// <summary>/// 所有需要实现自定义日期序列化效果的控制器,必须继承于VMEController/// </summary>public class CouponController : VMEController{    public ActionResult Index()    {        return View();    }    public ActionResult GetAllCouponTypes()    {        Hashtable hashtable = new Hashtable();        hashtable["sessionId"] = "";        string json = JsonHelper.Serialize(hashtable);        string retJson = HttpHelper.PostForJson("http://localhost/vme", "CouponService.svc", "GetAllCouponTypes", json);        string jsonResult = JsonHelper.GetString(retJson);        List<CouponType> results = JsonHelper.DeserializeObject<List<CouponType>>(jsonResult);        return Json(results, JsonRequestBehavior.AllowGet);    }}




0 0
原创粉丝点击