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

可能重复:
格式化Microsoft JSONdate?

ASP.NET函数Json()格式化并返回一个date

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

必须在客户端处理,这是有问题的。 对于来回发送date值的方法,您有什么build议?

这是在堆栈溢出的另一篇文章中find:

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

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

如果你不绑定到MS JSON序列化程序,你可以使用Json.NET 。 它带有一个IsoDateTimeConverter来处理序列化date的问题。 这会将date序列化为ISO 8601格式的string。

例如,在我们的项目序列化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。 这很容易使用。

有关更多信息,请参阅: 使用Json.NET良好(date)时间

它可能是丑陋的,但它的工作原理:

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

也许,没有必要匹配整个string,只是( – ?[0-9] +)就足够了…

并不是每个人都同意我这是个好主意,但我发现自己经常返回格式化的string,而不是正确的date。 请参阅我如何处理ASP.NET AJAX返回的JSONdate

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

我发现这更容易与我使用从MVC控制器序列化date时使用的Ext JS接口。

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

我将这些数据返回到Ext.data.JsonStore中,它能够将返回的值作为date,而不必指定date格式进行parsing。

  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格式,如果不需要的话,可以转换回来。

在客户端自动转换date(如果您使用jQuery)

你没有指定它,但是因为你正在使用ASP.NET MVC,你可以使用jQuery。 如果你这样做,如果你使用这个博客文章提供的代码,转换为实际date变得更简单。 该代码扩展了jQuery的$.parseJSON()function,因此它会自动将ISO和ASP.NETdatestring转换为实际的JavaScriptdate。

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

该扩展使用本机浏览器JSON支持适用,也适用于其他人不。 现代浏览器无论如何都支持这个function。

看看博客文章jQuery,Ajax,ASP.NET和date

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