关于javascript:如何使用json.net通过ASP.NET MVC传递json日期值?

How to pass a JSON date value via ASP.NET MVC using JSON.NET?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Format a Microsoft JSON date?

在ASP.NET Json()格式和函数时返回的日期为 </P >

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

这已经是产品处理与在客户端侧这就是problematic。。。。。。。什么是你的建议的方法的方法来发送日期值和倒死了吗? </P >


这是在堆栈溢出的另一个日志中发现的:

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

substr函数提取"/date"("part",parseint函数获取整数并忽略末尾的")/"。生成的数字将传递给日期构造函数。


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

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

1
2
3
4
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的good(date)times


它可能很难看,但它起作用:

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

可能,不需要匹配整个字符串,只需要(-?[0-9]+)足够了…


不是每个人都同意我的观点,这是一个好主意,但我发现自己经常返回格式化字符串,而不是正确的日期。了解如何处理ASP.NET Ajax返回的JSON日期。


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

——

您没有指定它,但是由于您使用的是ASP.NET MVC,所以您可能使用jquery。如果你这样做了,转换为实际日期就变得简单了,如果你使用这个博客文章上提供的代码。代码扩展了jquery的$.parseJSON()功能,因此它自动将iso和asp.net日期字符串转换为实际的javascript日期。

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

扩展使用本地浏览器JSON支持(如果适用),也可以在其他不支持的浏览器中使用。不管怎样,现代浏览器都支持这种功能。


在玩了json.net库之后,我想知道为什么您会选择使用isodateTimeConverter而不是JavaScriptDateTimeConverter。

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

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

我将把这些数据返回到ext.data.jsonstore中,它可以获取作为日期返回的值,而不必指定要分析的日期格式。

1
2
3
4
5
6
7
8
        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

JSON返回的结果如下:

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

如果你不需要的话,没有任何理由转换成ISO 8601格式并返回。


看看jquery、ajax、asp.net和日期的博客。

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