經過本身定義MVC的Controller的Json轉換器解決日期序列化格式問題

今日,在MVC框架下使用EasyUI的datagrid載入數據時,服務端返回的Json日期格式爲 /Date(1433088000000+0800)/ 。需要client進一步轉換。而且也不符合EasyUI常用的日期格式要求,爲此,對MVC框架下的Controller作了一些研究。發現經過對Controller的Json方法進行擴展就可以解決該問題。而且可以經過進一步本身定義序列化類,知足不論什麼類型的數據的序列化格式要求。json

要實現該目標,需要完畢三個步驟的工做:session

一、建立Controller的派生類。引入本身定義JsonResult框架

二、建立JsonResult的派生類。實現Json日期格式的本身定義實現ide

三、所有需要實現本身定義日期序列化格式的控制器,需繼承於上述Controller的派生類post

詳細代碼實現示比例如如下:this

/// <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);
    }
}
相關文章
相關標籤/搜索