博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用newtonjson解决Json日期格式问题
阅读量:6630 次
发布时间:2019-06-25

本文共 2992 字,大约阅读时间需要 9 分钟。

继承 JsonResult 方式

使用Json.Net代替最简单的方法就是使用下面的JsonNetResult 来作为 ActionResult 返回。

1) Install-Package newtonsoft.json

2) 创建一个JsonNetResult继承自JsonResult(相当于自定义ActionResult)

public class JsonNetResult : JsonResult    {        public JsonNetResult()        {            Settings = new JsonSerializerSettings            {                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,//忽略循环引用,如果设置为Error,则遇到循环引用的时候报错(建议设置为Error,这样更规范)                 DateFormatString = "yyyy-MM-dd HH:mm:ss",//日期格式化,默认的格式也不好看                 ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()//json中属性开头字母小写的驼峰命名            };        }        public JsonSerializerSettings Settings { get; private set; }        public override void ExecuteResult(ControllerContext context)        {            if (context == null)                throw new ArgumentNullException("context");            if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))                throw new InvalidOperationException("JSON GET is not allowed");            HttpResponseBase response = context.HttpContext.Response;            response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;            if (this.ContentEncoding != null)                response.ContentEncoding = this.ContentEncoding;            if (this.Data == null)                return;            var scriptSerializer = JsonSerializer.Create(this.Settings);            scriptSerializer.Serialize(response.Output, this.Data);        }    }

AOP 方式

下面使用最没有“侵入性”的方法(什么是“侵入性”?引入这个技术对系统的改动量)。

下面这种做法是体现了“一夫当关万夫莫开”的AOP的思想。

3) 新建一个类JsonNetActionFilter

public class JsonNetActionFilter : IActionFilter     {         public void OnActionExecuted(ActionExecutedContext filterContext)         {             //把 filterContext.Result从JsonResult换成JsonNetResult             //filterContext.Result值得就是Action执行返回的ActionResult对象             if (filterContext.Result is JsonResult                 &&!(filterContext.Result is JsonNetResult))             {                 JsonResult jsonResult = (JsonResult)filterContext.Result;                 JsonNetResult jsonNetResult = new JsonNetResult();                 jsonNetResult.ContentEncoding = jsonResult.ContentEncoding;                 jsonNetResult.ContentType = jsonResult.ContentType;                 jsonNetResult.Data = jsonResult.Data;                 jsonNetResult.JsonRequestBehavior = jsonResult.JsonRequestBehavior;                 jsonNetResult.MaxJsonLength = jsonResult.MaxJsonLength;                 jsonNetResult.RecursionLimit = jsonResult.RecursionLimit;                                 filterContext.Result = jsonNetResult;             }         }          public void OnActionExecuting(ActionExecutingContext filterContext)         {                      }     }

4) Global中加一句:GlobalFilters.Filters.Add(new JsonNetActionFilter ());

转载地址:http://ltwvo.baihongyu.com/

你可能感兴趣的文章
F5和VMware-共同交付软件定义的数据中心
查看>>
Java并发编程的艺术
查看>>
批量分发ssh公钥证书
查看>>
iOS encrypt Md5, Sha1,Base64
查看>>
git 常用命令
查看>>
Android系统启动流程(四)Launcher启动过程与系统启动流程
查看>>
jquery增,删,改一个html标签的class名字
查看>>
缓存技术
查看>>
怎么样将自己开发的Android应用程序编译到系统Image中
查看>>
Android度量单位说明(DIP,DP,PX,SP)
查看>>
Spring MVC和Struts2的比较的优点
查看>>
Redis配置文件redis.conf详解学习笔记八
查看>>
c++ qt 组播总结
查看>>
RobotFramework BuiltIn关键字笔记
查看>>
Spring整合JMS(四)——事务管理
查看>>
nginx根据客户端ip地理位置转发到不同服务器上(Geoip+nginx)
查看>>
百度网页分享js代码
查看>>
j2EE servlet(一)
查看>>
初步实现 Mail 插件 —— 发送邮件
查看>>
JS 浮点数四则运算精度丢失问题
查看>>