如何處理ASP.NET MVC5 返回JsonResult DateTime類型格式化問題

1、問題

ASP.NET MVC在返回JSON對象的時候,DateTime類型默認返回的是:/Date("xxxxxxxxxxxx")/
在這裏插入圖片描述

2、解決

使用Newtonsoft.Json 對日期進行格式化,首先在項目中安裝Newtonsoft.Json

2.1、自定義一個JsonResult的子類

重寫JsonResultExecuteResult方法

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace JNET.Web.Infrastructure.Convert
{
    public class JsonNetResult: JsonResult
    {
        /// <summary>
        /// 日期格式
        /// </summary>
        public string DateFormatStr { get; set; } = "yyyy-MM-dd HH:mm:ss";
        public JsonNetResult()
        {
        }
        public JsonNetResult(object data)
        {

        }
        public override void ExecuteResult(ControllerContext context)
        {
            HttpResponseBase response = context.HttpContext.Response;
            if (string.IsNullOrEmpty(this.ContentType))
            {
                response.ContentType = "application/json";
            }
            else
            {
                response.ContentType = this.ContentType;
            }
            if (ContentEncoding != null)
                response.ContentEncoding = ContentEncoding;
            if (Data != null)
            {
                JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting.Indented, DateFormatString=DateFormatStr };
                JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings());
                serializer.Serialize(writer, Data);
                writer.Flush();
            }
        }
    }
}

2.1、定義BaseController

定義BaseController重寫JsonResult方法

BaseController代碼:

public class BaseController: Controller
    {
     
          /// <summary>
        /// 重寫JsonResult
        /// </summary>
        /// <param name="data"></param>
        /// <param name="contentType"></param>
        /// <param name="contentEncoding"></param>
        /// <param name="behavior"></param>
        /// <returns></returns>
        protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
        {
            return new JsonNetResult
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding,
                JsonRequestBehavior = behavior,
                DateFormatStr= "yyyy-MM-dd HH:mm:ss"
            };
        }
        /// <summary>
        /// 自定義JSON返回
        /// </summary>
        /// <param name="data"></param>
        /// <param name="behavior"></param>
        /// <param name="DateFormatStr"></param>
        /// <returns></returns>
        protected JsonResult ResultJson(object data, JsonRequestBehavior behavior, string DateFormatStr)
        {
            return new JsonNetResult
            {
                Data = data,
                JsonRequestBehavior = behavior,
                DateFormatStr= DateFormatStr
            };
        }
        /// <summary>
        /// 自定義JSON返回
        /// </summary>
        /// <param name="data"></param>
        /// <param name="behavior"></param>
        /// <returns></returns>
        protected JsonResult ResultJson(object data, JsonRequestBehavior behavior)
        {
            return new JsonNetResult
            {
                Data = data,
                JsonRequestBehavior = behavior
            };
        }
        /// <summary>
        /// 自定義JSON返回
        /// </summary>
        /// <param name="data"></param>
        /// <param name="DateFormatStr"></param>
        /// <returns></returns>
        protected JsonResult ResultJson(object data, string DateFormatStr)
        {
            return new JsonNetResult
            {
                Data = data,
                DateFormatStr = DateFormatStr
            };
        }
        /// <summary>
        /// 自定義JSON返回
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        protected JsonResult ResultJson(object data)
        {
            return new JsonNetResult
            {
                Data = data
            };
        }
    }

3、使用

在對應的Controller中繼承BaseController

       /// <summary>
        /// 返回列表數據
        /// </summary>
        /// <returns></returns>
        public JsonResult ListData()
        {
            List<Office> list = _officeService.GetAllEntity();
            return this.ResultJson(list, JsonRequestBehavior.AllowGet);
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章