序列化DateTime属性以在javascript中工作
我有一个具有DateTime属性的c#对象列表,我使用NewtonSoft将其序列化序列化DateTime属性以在javascript中工作,javascript,c#,json,datetime,json.net,Javascript,C#,Json,Datetime,Json.net,我有一个具有DateTime属性的c#对象列表,我使用NewtonSoft将其序列化 result = Newtonsoft.Json.JsonConvert.SerializeObject( PagedZoningCases ); 这使得日期时间显示为: CallDateTime:“2017-04-17T17:06:00” 但是这在javascript中是不好的,所以我尝试了以下方法 result = Newtonsoft.Json.JsonConvert.SerializeObject(
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:“新日期(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);
Date
构造函数,因为:
日期类型(顺便说一句,不要尝试在StackOverflow控制台中打印日期,因为它只打印字符串):
var json=“[{\“CallDateTime\”:\“2019-11-26T14:28:35.5185231+02:00\””;
var records=JSON.parse(JSON);
var recordsWithDates=records.map(函数(r){
r、 CallDateTime=新日期(r.CallDateTime);
返回r;
});
//validate CallDateTime为日期类型
console.log(typeof recordsWithDates[0].CallDateTime.getMonth==='function')
似乎您在某个地方遗漏了一步,因为从表面上看,您做的一切都是对的。因此,让我在此概述所需的步骤:
您有一个属性为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,并使用Date
构造函数,因为:
就这样。您可以验证是否有类似的日期类型(顺便说一句,不要尝试在StackOverflow控制台中打印日期,因为它只打印字符串):
var json=“[{\“CallDateTime\”:\“2019-11-26T14:28:35.5185231+02:00\””;
var records=JSON.parse(JSON);
var recordsWithDates=records.map(函数(r){
r、 CallDateTime=新日期(r.CallDateTime);
返回r;
});
//validate CallDateTime为日期类型
console.log(typeof recordsWithDates[0].CallDateTime.getMonth==='function')
您能不能像解析新日期(date.parse(myDateString))那样解析JSON中的格式化日期?您列出的第一种格式将正确解析。我正在解析对象集合,而不是一次性的字符串。是的,第一种格式进行解析,但我希望它作为:CallDateTime:new date(2019-11-21T02:29:33.392Z)位于集合中,这将意味着改变它的方式serialized@Hank,我的回答有助于你解决问题吗?如果是,请将其标记为已接受。如果没有,请告诉我,我会尽力提供进一步的帮助。您能不能像这样从JSON解析格式化的日期?您列出的第一种格式将正确解析。我正在解析对象集合,而不是一次性的字符串。是的,第一种格式进行解析,但我希望它作为:CallDateTime:new date(2019-11-21T02:29:33.392Z)位于集合中,这将意味着改变它的方式serialized@Hank,我的回答有助于你解决问题吗?如果是,请将其标记为已接受。如果没有,请告诉我,我会尽力进一步帮助你。