28

我正在尝试使用Newtonsoft.Json.JsonConvert反序列化/序列化时间跨度,但是当发送 JSON 时,它设置为 00:00:00。

这甚至可能吗?

4

4 回答 4

15

我尝试了#Jessycormier 的方法,但它对我不起作用。我运行 DataContractJsonSerializer 来查看它会生成什么,我发现它给了我一个看起来更像这样的值。

{"PassedTimeSpan":"P1DT2H3M4S"}

上面显示的值是 1 天 2 小时 3 分钟 4 秒。

所以看起来格式是:

[-]P[{days}D][T[{hours}H][{min}M][{sec}S]]

在哪里:

- 表示负时间跨度,正值省略
P 必须是第一个字符(除非是负时间值)
T 必须在时间跨度的时间部分之前。
[] = 如果为 0,则可以省略的可选部分。

于 2015-04-28T02:13:43.583 回答
5

我想通了,显然这是一个MS设计缺陷......

由于 TimeSpan 不能是无参数对象。XML 无法重新创建它。

看看这个网站。 http://forums.silverlight.net/forums/p/51793/135450.aspx

所以。因此无法转换 TimeSpan。一种简单的方法是将时间跨度更改为字符串,然后将字符串发送过来。并使用 TimeSpan.TryParse(String);

于 2010-07-13T14:05:01.420 回答
4

如果您应用确切的格式,您可以使用 TimeSpan。格式为:“0.00:00:00.0000”

将 TimeSpan 设置为 30 分钟

var jsonData = JSON.stringify({
    myDataObject: {
         TimeSpanValue : "0.00:" + $("#InputWithMinVal").val() + ":00.0"
    }
});

这个解决方案对我有用。我将 MVC 4.0 与 .Net 框架 4.0 一起使用。

于 2013-05-22T18:25:03.960 回答
4

这些答案都已经过时了,所以我想我会提供一个更新的更好的答案。moment.js现在直接支持 .NETTimespan序列化格式。

从 2.1.0 版开始,支持:

moment.duration('23:59:59');
moment.duration('23:59:59.999');
moment.duration('7.23:59:59.999');
moment.duration('23:59'); // added in 2.3.0
于 2017-03-15T03:52:04.047 回答