MVC控制器中,經常使用Newtonsoft.Json把對象序列化成json字符串傳遞到前端視圖。當對象中有DateTime類型的屬性時,前后臺如何處理才能把DateTime類型轉換成想要的格式呢?
?
有這樣的一個類具有DateTime類型屬性:
using System;
?
namespace MvcApplication1.Models
{
public class Sample
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Date { get; set; }
}
}
?
控制器中使用Newtonsoft.Json把對象實例序列化成json字符串:
using System.Web.Mvc;
using MvcApplication1.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
?
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var sample = new Sample()
{
Id = 1,
Name = "good",
Date = DateTime.Now
};
?
JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
ViewData["json"] = Newtonsoft.Json.JsonConvert.SerializeObject(sample, microsoftDateFormatSettings);
return View();
}
?
}
}
?
前臺視圖使用一個叫"f"的js文件,把json中的日期格式轉換成期望的樣子:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<p>
<span id="jsonDate">@ViewData["json"]</span>
</p>
?
<p>
轉換后的時間格式為:<span id="fDate"></span>
</p>
?
@section scripts
{
<script src="~/Scripts/date.f-0.5.0.js"></script>
<script type="text/javascript">
$(function () {
var obj = $.parseJSON($('#jsonDate').text());
//$('#fDate').text(new Date(parseInt(obj.Date.substr(6))).f("yyyy-MM-dd HH:mm:ss"));
$('#fDate').text(new Date(parseInt(obj.Date.substr(6))).f("yyyy-MM-dd"));
});
</script>
}
?
結果:
?
參考資料:
關于"f" 的js文件:http://fisforformat.sourceforge.net/
關于Newtonsoft.Json:http://james.newtonking.com/json/help/index.html?topic=html/DatesInJSON.htm