通过自己定义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);
    }
}
时间: 2024-11-14 10:49:29

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

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

今日,在MVC框架下使用EasyUI的datagrid加载数据时,服务端返回的Json日期格式为 /Date(1433088000000+0800)/ ,需要客户端进一步转换,而且也不符合EasyUI常用的日期格式要求,为此,对MVC框架下的Controller做了一些研究,发现通过对Controller的Json方法进行扩展就可以解决该问题,而且可以通过进一步自定义序列化类,满足任何类型的数据的序列化格式要求. 要实现该目标,需要完成三个步骤的工作: 1.创建Controller的派生类,引入

SpringBoot学习笔记(5):处理前端JSON返回的日期的格式

SpringBoot学习笔记(4):处理前端JSON返回的日期的格式 问题描述 前端页面显示的时间为毫秒格式,不利于直观显示! 解决方法1--后端解决 public class Flow { @JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8") private Date flow_date; ..... } 解决方法2--JS处理 function crtTimeFtt(val, row) { if (val !

JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List&lt;T&gt;转JSON,JSON转List&lt;T&gt;,JSON转C#对象

一.JSON解析与字符串化                                                                                            JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的属性名 indent,格式化为可读的代码,可指定分隔符或指定的缩进空格个数 var man

Asp.net MVC 中Controller返回值类型ActionResult

内容转自 http://blog.csdn.net/pasic/article/details/7110134 Asp.net MVC中Controller返回值类型 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必须是一个public方法 必须是实例方法 没有标志NonActionAttribute特性的(NoAction) 不能被重载 必须返回ActionResult类型 如: [csharp] view pl

使用Spring MVC 的 @RequestBody 映射json请求参数时报异常问题

使用Spring MVC 的 @RequestBody 映射json请求参数时报"The request sent by the client was syntactically incorrect."异常解决方案 最近工作中开发RESTful接口需要处理客户端上传的json,图方便想起Spring的Controller中有@RequestBody可以优雅地完成json报文与Java类的映射,但是使用时碰到了 "The request sent by the client w

JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象

一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的属性名 indent,格式化为可读的代码,可指定分隔符或指定的缩进空格个数 var man = { name: "张三", Age: 24, money: 123123 }; var str1 = JSON.stringify(man); //基本序列化 doc

Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07

目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Ajax 实现效果 contentType 前后端传输数据编码格式 ajax 提交数据 ajax发 json 格式数据 ajax 传文件 序列化组件 利用 sweetalert 搭建页面(弹窗) 弹窗中文支持不太好,手动修改样式 页面数据没刷新的问题 自定义分页器 批量插入测试数据 bulk_creat

使用Json.Net解决MVC中各种json操作

最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能.NewtonSoft.json也就是Json.Net性能虽然不是最好的,但是是比较靠前的,其功能是最强大的,包含各种json操作模式.现在来看看mvc中的替换1, Controller.Json方法这个方法最容易出现循环引用,比如EF查出一个一对多集合想序列化,结果a引用了子表b,b中还引用了a,导

Spring MVC的Controller统一异常处理:HandlerExceptionResolver

出现异常并不可怕,可怕的是出现了异常,你却不知道,也没有进行异常处理. Spring MVC的Controller出现异常的默认处理是响应一个500状态码,再把错误信息显示在页面上,如果用户看到这样的页面,一定会觉得你这个网站太LOW了. 要解决Controller的异常问题,当然也不能在每个处理请求的方法中加上异常处理,那样太繁琐.Spring MVC提供了一个HandlerExceptionResolver接口,可用于统一异常处理. HandlerExceptionResolver接口 pu