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

Posted

技术标签:

【中文标题】如何使用 JSON.NET 通过 ASP.NET MVC 传递 JSON 日期值? [复制]【英文标题】:How to pass a JSON date value via ASP.NET MVC using JSON.NET? [duplicate] 【发布时间】:2010-11-18 19:44:01 【问题描述】:

可能重复:Format a Microsoft JSON date?

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

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

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

【问题讨论】:

【参考方案1】:

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

--

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

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

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

【讨论】:

【参考方案2】:

这是在 *** 上的 another post 中找到的:

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

substr 函数取出"/Date(" 部分,parseInt 函数获取整数并忽略最后的")/"。结果数字被传递到 Date 构造函数中。

【讨论】:

最简单的解决方案是最好的【参考方案3】:

在玩过 Json.NET 库之后,我想知道为什么您会选择使用 IsoDateTimeConverter 而不是 JavascriptDateTimeConverter。

我发现这更容易与我在从 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 格式并在不需要时转换回来。

【讨论】:

因为JavaScriptDateTimeConverterdoes not produce valid JSON。如果您想与更多需要有效 JSON 的客户端保持互操作性,那么最好坚持使用 ISO 8601。【参考方案4】:

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

【讨论】:

【参考方案5】:

看看博文jQuery, Ajax, ASP.NET and dates

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

【讨论】:

这提供了一些见解,但使用 jQuery 处理 ASP.NET Web 服务而不是 MVC 控制器通过 Json() 返回 JsonResult。我对没有 MSFT ajax 的 jQuery 到 ASP.NET MVC 感兴趣。 问题主要在于具有日期属性而不是单个日期值的复杂对象。 示例中的 JSON 格式与您描述的完全相同。日期属性或单个日期值没有区别。【参考方案6】:

它可能很丑,但它有效:

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

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

【讨论】:

【参考方案7】:

如果您没有绑定到 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,因为它返回的 ActionResult 可用于 ASP.NET MVC 应用程序。它非常易于使用。

更多信息请见:Good (Date)Times with Json.NET

【讨论】:

不知道我们是怎么错过的,谢谢

以上是关于如何使用 JSON.NET 通过 ASP.NET MVC 传递 JSON 日期值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET MVC 控制器方法返回由 JSON.NET 序列化的 camelCase JSON?

如何在 ASP.NET Web API 中为 Json.NET 设置自定义 JsonSerializerSettings?

在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求

如何在 asp.net owin api 项目中启用 JSON.NET 序列化/反序列化跟踪?

ASP.NET MVC 下自定义 JsonResult,使用 Json.NET 序列化 JSON

没有 ASP.NET 的 C# JSON-RPC 网络服务器