Internet Explorer,Json.Net JavaScript日期和毫秒问题

YS.*_*YS. 9 javascript internet-explorer datetime json.net

我不确定我是否遗漏了某些东西 - 或IE或Json.Net.

但基本上这是有效的:

new Date("2012-08-03T12:36:54.743Z")

此操作因"无效日期"错误而失败:

new Date("2012-08-03T12:36:54.74Z")

第二个日期存储在SQL Server中:

2012-08-03 12:36:54.740

然后使用Json.Net将其序列化为JSON.Json.Net确实将日期序列化为2012-08-03T12:36:54.74Z,有效地切断了最后的0.

我的问题:

  • 这是IE中的预期行为 - 它需要在毫秒位中使用全部3位数才能工作吗?
  • 这是Json.Net中的预期行为 - 它会在日期中切断最后的0吗?

fer*_*ero 11

我不能告诉你它是否有意,但我已经做了很多搜索,我也没有找到真正解决这个问题的方法.似乎我们必须接受IE只接受三位数的事实.解决这个问题的唯一方法(对我来说)是在序列化时为Json.NET使用自定义转换器:

string json = JsonConvert.SerializeObject(
    whatEver,
    new IsoDateTimeConverter
        {
            DateTimeFormat = "yyyy-MM-dd\\THH:mm:ss.fffK"
        }
    );
Run Code Online (Sandbox Code Playgroud)

(仅使用Json.NET 4.0.8和4.5.8进行测试)

这迫使Json.NET使用正好3个小数位.

据我所知,Json.NET DateTime以最大必要的精度序列化ISO格式的值,在"秒"值的小数位中省略尾随零.

这匹配的输出

someDateTimeValue.ToString("yyyy-MM-dd\\THH:mm:ss.FFFFFFFK")
Run Code Online (Sandbox Code Playgroud)
  • 正常DateTime类似DateTime.UtcNow将被序列化为最多7位数,因为这是a的精度DateTime(以Ticks测量).
  • 如果"second"的"second"部分DateTime具有较少的小数位,Json.NET将省略那些尾随零.
  • DateTime.Today因此,日期值将包含"秒"值后面的数字,因为它完全正确0.

另请参阅自定义日期和时间格式字符串的此说明.

  • 您可以在`GlobalConfiguration`中指定`IsoDateTimeConverter`作为默认值.打开你的`Global.asax.cs`,并添加如下内容:`GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter {DateTimeFormat ="yyyy-MM-dd \\ THH:mm:ss. fffK"});` (8认同)