Mvc重写JsonResult

用了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的时候就能看到们想要的结果。

网上类似的例子很多,我也参考了其它很多自恋,在此就不一一例举了。

转载于:https://www.cnblogs.com/mengqin/p/Mvc.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值