• 通过自己定义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);
        }
    }




  • 相关阅读:
    教你怎样做个有“钱”途的測试project师
    使用具体解释及源代码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
    html-上左右布局方式---ShinePans
    POJ1502 MPI Maelstrom Dijkstra
    Angry IP Scanner 获取设备的IP
    【Struts2学习笔记(12)】Struts2国际化
    使用SQL Profile及SQL Tuning Advisor固定运行计划
    sage开发url替换字符串
    柯塔娜大合唱,互联网安全观
    vim水平摆放全部窗体的三个方法
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7400537.html
Copyright © 2020-2023  润新知