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);
        }
    }




  • 相关阅读:
    Android测试:从零开始3—— Instrumented单元测试1
    Android测试:从零开始2——local单元测试
    自定义封装 banner 组件
    常用表单 组件封装
    ContentProvider域名替换小工具
    接口回调封装
    日常记录-代码中Background后Padding 失效
    EditText 限制输入整数和小数 的位数
    (求助)对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知
    图片选择器ImageEditContainer
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7400537.html
Copyright © 2011-2022 走看看