zoukankan      html  css  js  c++  java
  • 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题

    今日,在MVC框架下使用EasyUI的datagrid载入数据时,服务端返回的Json日期格式为 /Date(1433088000000+0800)/ 。须要client进一步转换。并且也不符合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);
        }
    }




  • 相关阅读:
    spring mvc配置完后实现下载功能
    表单中Readonly和Disabled的区别(转载)
    EL表达式中fn函数 (转载)
    Spring mvc中@RequestMapping 6个基本用法小结(转载)
    web开发,关于jsp的常见问题,重复提交,防止后退。
    JQuery页面加载
    解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题(转载)
    数据库设计原则(转载)
    dhtmlxTree介绍(转载)
    主键索引
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7400537.html
Copyright © 2011-2022 走看看