我有一个具有 DateTime 属性的 C# 对象列表,我使用 NewtonSoft 对其进行序列化
result = Newtonsoft.Json.JsonConvert.SerializeObject( PagedZoningCases );
这使得日期时间显示为:
CallDateTime: "2017-04-17T17:06:00"
但这在 javascript 中不好,所以我尝试了以下
result = Newtonsoft.Json.JsonConvert.SerializeObject( PagedZoningCases, new Newtonsoft.Json.Converters.JavaScriptDateTimeConverter);
这更好一点,它会产生以下结果:
CallDateTime: "new Date(1396496760000)"
当我将结果返回到页面并在 javascript 中执行 JSON.parse(result) 时,它会抛出错误
我执行了以下测试来查看 javascript 的期望:
var date = new Date();
console.log(date); //Thu Nov 21 2019 15:29:33 GMT+1300 (New Zealand Daylight Time)
var json = JSON.stringify(date);
console.log(json); //"2019-11-21T02:29:33.392Z"
var date2 = new Date(dateStr);
console.log(date2); //Thu Nov 21 2019 15:29:33 GMT+1300 (New Zealand Daylight Time)
所以 NewtonSoft 的转换器似乎没有将日期转换为在 Date() 函数内工作的正确值。它给出了纪元过去的毫秒数,但 javascript 并不期望这样。
如何从 C# 序列化 DateTime 并通过 JSON 将其解析为 JavaScript 日期对象?
最佳答案
你似乎在某个地方缺少了一步,因为从表面上看,你做的一切都是正确的。因此,让我在这里概述所需的步骤:
您有一个具有
DateTime
类型属性的类,例如PagedZoningCase
:public class PagedZoningCase { public DateTime CallDateTime { get; set; } }
您有一个
PagedZoningCase
类型的对象,并使用以下代码序列化它:var records = new List<PagedZoningCase> { new PagedZoningCase { CallDateTime = DateTime.Now } }; var json = Newtonsoft.Json.JsonConvert.SerializeObject(records);
你会得到一个如下所示的 json:
"[{\"CallDateTime\":\"2019-11-26T14:28:35.5185231+02:00\"}]"
在客户端,您解析此 json,并使用
Date
构造函数,因为 JSON does not know anything about dates :var json = "[{\"CallDateTime\":\"2019-11-26T14:28:35.5185231+02:00\"}]"; var records = JSON.parse(json); var recordsWithDates = records.map(function (r) { r.CallDateTime = new Date(r.CallDateTime); return r; });
就是这样。您可以验证您是否具有像这样的 Date
类型(顺便说一句,不要尝试在 StackOverflow 控制台中打印日期,因为它只打印字符串):
var json = "[{\"CallDateTime\":\"2019-11-26T14:28:35.5185231+02:00\"}]";
var records = JSON.parse(json);
var recordsWithDates = records.map(function (r) {
r.CallDateTime = new Date(r.CallDateTime);
return r;
});
// validate CallDateTime is of Date type
console.log(typeof recordsWithDates[0].CallDateTime.getMonth === 'function')
关于javascript - 序列化 DateTime 属性以在 javascript 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58966541/