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




posted @ 2017-08-20 16:55  yfceshi  阅读(1148)  评论(0编辑  收藏  举报