Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化DateTime属性以在javascript中工作_Javascript_C#_Json_Datetime_Json.net - Fatal编程技术网

序列化DateTime属性以在javascript中工作

序列化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(

我有一个具有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:“新日期(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,并使用
    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,我的回答有助于你解决问题吗?如果是,请将其标记为已接受。如果没有,请告诉我,我会尽力进一步帮助你。