Asp.net mvc 项目返回Json

因mvc控制器返回类型JsonResult 在处理对象转JSON的时候,对日期的格式化处理并不太符合要求,所以重新继承抽象类ActionResult使用Newtonsoft.Json来系列化

using System;
using System.Text;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;

namespace Comon
{
    public class JsonNetResult : ActionResult
    {
        /// <summary>
        ///     在静态构造函数中设置JsonNet的时间处理方式
        /// </summary>
        static JsonNetResult()
        {
            JsonSerializerSettings settings = new JsonSerializerSettings();
            JsonConvert.DefaultSettings = () =>
            {
                //日期类型默认格式化处理
                settings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
                settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";

                return settings;
            };
        }

        /// <summary>初始化 <see cref="T:System.Web.Mvc.JsonResult" /> 类的新实例。</summary>
        public JsonNetResult()
        {
            JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        }

        /// <summary>获取或设置内容编码。</summary>
        /// <returns>内容编码。</returns>
        public Encoding ContentEncoding { get; set; }

        /// <summary>获取或设置内容的类型。</summary>
        /// <returns>内容的类型。</returns>
        public string ContentType { get; set; }

        /// <summary>获取或设置数据。</summary>
        /// <returns>数据。</returns>
        public object Data { get; set; }

        /// <summary>获取或设置一个值,该值指示是否允许来自客户端的 HTTP GET 请求。</summary>
        /// <returns>一个值,指示是否允许来自客户端的 HTTP GET 请求。</returns>
        public JsonRequestBehavior JsonRequestBehavior { get; set; }


        /// <summary>通过从 <see cref="T:System.Web.Mvc.ActionResult" /> 类继承的自定义类型,启用对操作方法结果的处理。</summary>
        /// <param name="context">执行结果时所处的上下文。</param>
        /// <exception cref="T:System.ArgumentNullException">
        ///     <paramref name="context" /> 参数为 null。
        /// </exception>
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
                throw new ArgumentNullException(nameof(context));
            if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
                string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
                throw new InvalidOperationException("不允许使用Get方法访问");
            HttpResponseBase response = context.HttpContext.Response;
            response.ContentType = string.IsNullOrEmpty(ContentType) ? "application/json" : ContentType;
            if (ContentEncoding != null)
                response.ContentEncoding = ContentEncoding;
            if (Data == null)
                return;

            response.Write(JsonConvert.SerializeObject(Data));
        }
    }
}

在静态构造函数里面设置了系列化日期的格式

posted @ 2019-03-06 13:43  _York  阅读(2603)  评论(0编辑  收藏  举报