1、問題
ASP.NET MVC在返回JSON對象的時候,DateTime類型默認返回的是:/Date("xxxxxxxxxxxx")/
。
2、解決
使用Newtonsoft.Json
對日期進行格式化,首先在項目中安裝Newtonsoft.Json
。
2.1、自定義一個JsonResult的子類
重寫JsonResult
的ExecuteResult
方法
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);
}