如何使用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。