7

我目前正在开发一个项目,我通过 ajax 将 .Net 类型通过 ajax 发送到客户端应用程序。我对被序列化并设置给客户端的对象没有任何问题。

当我获取完全相同的对象并通过 Web 方法将其发布回服务器时遇到以下错误:/Date(1373950800000)/ is not a valid value for DateTime. 这很烦人,因为这就是 Microsoft 给我的方式,但这不是重点。

有没有人可以快速解决这个问题?我想要一种无缝的方式来实现这一点,而不必在从 ajax 调用返回之前更改对象。

4

5 回答 5

8

您的问题归结为您正在使用的服务器端 JavaScript 序列化程序;JsonDataContractSerializer(ASP.NET MVC 的默认序列化程序)或(NewtonSoft Json SerializerASP.NET Web API 的默认序列化程序)。

有关此日期修改问题的直观示例以及可能的解决方案,请查看JSON Dates are different in ASP.NET MVC and Web API

于 2013-08-02T17:08:02.703 回答
7

在序列化以下代码时处理 DateFormat 将解决您的问题

   JsonConvert.SerializeObject(yourobject, Formatting.Indented,
                    new JsonSerializerSettings
                    {
                         DateFormatHandling = DateFormatHandling.IsoDateFormat
                    });

它将导致日期为 2009-02-15T00:00:00Z 格式

于 2016-07-21T07:49:27.287 回答
2

这将帮助您解决错误:点击我

var yourDateTimeObject = ...
var converter = new IsoDateTimeConverter();

string isoDateTime = Newtonsoft.Json.JsonConvert.SerializeObject(yourDateTimeObject, converter);
于 2013-08-02T17:00:38.523 回答
0

这是我用于这些事情的方法:

首先,您需要清除日期参数中的垃圾

String unixDate = "/Date(1373950800000)/";
unixDate = unixDate.Replace("/Date(","").Replace(")/", "");

现在,由于 .NET 和 unix 以不同的方式测量时间,您必须通过创建一个设置为 1970 年 1 月 1 日的日期来弥补这一点,然后添加您通过的日期的数字部分

DateTime dotNetDate = new DateTime(1970, 1, 1);
dotNetDate = dotNetDate.AddMilliseconds(Convert.ToInt64(unixDate)

您还应该注意,这里会损失精度 - .NET 日期是最接近的纳秒,而 unix 日期是最接近的毫秒

于 2013-08-02T17:01:04.817 回答
-1

尝试发送带有正斜杠转义的日期。我有一个 iPad 客户端,它将 JSON 发布到 ASP.NET WebAPI 服务方法,我们必须以这种方式发送日期:

"due": "\/Date(1335830400000)\/"

于 2013-08-02T18:28:17.787 回答