通过自定义MVC的Controller的Json转换器解决日期序列化格式问题

5 篇文章 0 订阅

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值