如何使用JSON.NET通过ASP.NET MVC传递JSON日期值?

时间:2009-08-12 00:51:07

标签: javascript asp.net-mvc json datetime json.net

  

可能重复:
  Format a Microsoft JSON date?

ASP.NET函数Json()格式化并返回日期

{"d":"\/Date(1240718400000)\/"}

必须在客户端处理,这是有问题的。您对来回发送日期值的方法有何建议?

7 个答案:

答案 0 :(得分:29)

这是在Stack Overflow上的another post中找到的:

var date = new Date(parseInt(jsonDate.substr(6))); 

substr函数取出“/ Date(”部分,并且parseInt函数获取整数并忽略最后的“)/”。结果数字传递给Date构造函数。

答案 1 :(得分:11)

如果您没有绑定到MS JSON序列化程序,则可以使用Json.NET。它附带了一个IsoDateTimeConverter来处理序列化日期的问题。这会将日期序列化为ISO 8601格式化的字符串。

例如,在我们的项目中,序列化myObject通过以下代码处理。

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

如果你决定采用Json.NET,你还需要抓取JsonNetResult,因为它返回一个可以在ASP.NET MVC应用程序中使用的ActionResult。这很容易使用。

有关详细信息,请参阅:Good (Date)Times with Json.NET

答案 2 :(得分:6)

它可能很丑,但它确实有效:

 var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
 $("#field").text((new Date(parseInt(epoch[1]))).toDateString());

可能没有必要匹配整个字符串,只是( - ?[0-9] +)就够了......

答案 3 :(得分:5)

并非所有人都认同这是一个好主意,但我发现自己最常返回格式化的字符串而不是正确的日期。请参阅 How I handle JSON dates returned by ASP.NET AJAX

答案 4 :(得分:1)

在玩Json.NET库之后,我想知道为什么你会选择在JavascriptDateTimeConverter上使用IsoDateTimeConverter。

我发现在从MVC控制器序列化日期时,我更容易使用我使用的Ext JS接口。

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

我将这些数据放回Ext.data.JsonStore,它能够将返回的值作为日期获取,而不必指定要解析的日期格式。

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

返回的JSON如下所示:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

没有任何理由转换为ISO 8601格式,如果不需要,则返回。

答案 5 :(得分:1)

在客户端自动转换日期(如果使用jQuery)

-

您没有指定它,但由于您使用的是ASP.NET MVC,因此您可能正在使用jQuery。如果您这样做,如果您使用this blog post上提供的代码,转换为实际日期会变得更简单。该代码扩展了jQuery的$.parseJSON()功能,因此它自动将ISO和ASP.NET日期字符串转换为实际的JavaScript日期。

我在ASP.NET MVC中使用它,它就像一个魅力。最好的部分是它也向后兼容。使用$.parseJSON()的现有代码将像以前一样工作(并且实际上工作相同),但如果您提供第二个参数并将其值设置为true,则所有日期将自动转换为您。< / p>

扩展程序在适用的情况下使用本机浏览器JSON支持,也适用于其他不支持的扩展程序。现代浏览器无论如何都支持此功能。

答案 6 :(得分:0)

查看博客帖子 jQuery, Ajax, ASP.NET and dates

详细介绍了如何使用ASP.NET MVC和jQuery在服务器端和客户端之间通过JSON传递日期。