Mvc重写JsonResult
2024-08-26 23:03:44
用了mvc有一段时间了,慢慢的熟悉起来了,也渐渐的发现了mvc的一些缺点,比如当我们返回 Json(new{})的时候没办法做到将首字母转换成小写、日期再序列化过后是时间戳需要到前台重新处理或者提在在对象中处理,这些都很不方便,用起来相当不舒服,所有在参考了一些其他的资料以后就重写了这个json序列化的方法。全程没什么难点,和自身序列化不同的地方在于放弃了微软自带的json序列化方法而该用了第三方的json.net的序列化框架。下面就是实现过程。
1.新建一个类CustomesJsonResult 继承自mvc自带的JsonResult,重写它的ExecuteResult方法。
public class CustomsJsonResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
var response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json";
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
var jsonSerizlizerSetting = new JsonSerializerSettings();
//设置取消循环引用
jsonSerizlizerSetting.MissingMemberHandling = MissingMemberHandling.Ignore;
//设置首字母小写
jsonSerizlizerSetting.ContractResolver = new CamelCasePropertyNamesContractResolver();
//设置日期的格式为:yyyy-MM-dd
jsonSerizlizerSetting.DateFormatString = "yyy-MM-dd";
var json = JsonConvert.SerializeObject(Data, Formatting.None, jsonSerizlizerSetting);
response.Write(json);
}
}
至此整个重写已经完成(当然了你可以随意添加自己的设置根据自己需求),剩下就是怎么使用了:
1.我们需要新建一个BaseController并继承自Controller类。如下:
public class BaseAdminController : Controller
{
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new CustomsJsonResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior };
} }
至此整个重写和使用已经完成了,后面我们只需要在新建控制器的时候继承自BaseController就可以了,当我们返回josn的时候就能看到们想要的结果。
网上类似的例子很多,我也参考了其它很多自恋,在此就不一一例举了。
最新文章
- 【XSS】延长 XSS 生命期
- Vim找不到配色文件的解决方法
- WPF DataGrid常用属性记录
- 2016 icpc-camp 之旅(一)
- IText 生成简单表格(报表)doc文档 单元居中
- ACM——数的计数
- Hibernate:1对1关系总结。
- 打开U盘里是U盘的快捷方式?(2013.12.05)
- linux命令find应用
- ArtDialog V6的简单使用
- R数据分析 第一篇:温习概率论
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
- Unity Socket UDP
- JAVA基础复习与总结<;二>;构造方法_static关键字_final关键字
- Cookie/Session的机制与安全
- python命令行运行py文件找不到模块的解决办法
- ssh框架里拦截器的权限验证基本思路【转】
- 下拉列表 通过option 改变div的内容
- [django]session设置与获取原理
- iftop网络流量查看工具
热门文章
- python学习笔记11 ----线程、进程、协程
- lable对picbox透明
- 常用转义字符例如&;amp;的含义
- VS插件开发(生成实体类)
- gitlab 502解决方案
- Spring-boot 项目中使用 jackson 遇到的一个问题
- Neutron网络研究
- How to download a file with plus symbol(+) filename in IIS?
- loj#6053. 简单的函数(Min_25筛)
- Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题