我正在尝试使用Newtonsoft.Json.JsonConvert反序列化/序列化时间跨度,但是当发送 JSON 时,它设置为 00:00:00。
这甚至可能吗?
我正在尝试使用Newtonsoft.Json.JsonConvert反序列化/序列化时间跨度,但是当发送 JSON 时,它设置为 00:00:00。
这甚至可能吗?
我尝试了#Jessycormier 的方法,但它对我不起作用。我运行 DataContractJsonSerializer 来查看它会生成什么,我发现它给了我一个看起来更像这样的值。
{"PassedTimeSpan":"P1DT2H3M4S"}
上面显示的值是 1 天 2 小时 3 分钟 4 秒。
所以看起来格式是:
[-]P[{days}D][T[{hours}H][{min}M][{sec}S]]
在哪里:
- 表示负时间跨度,正值省略
P 必须是第一个字符(除非是负时间值)
T 必须在时间跨度的时间部分之前。
[] = 如果为 0,则可以省略的可选部分。
我想通了,显然这是一个MS设计缺陷......
由于 TimeSpan 不能是无参数对象。XML 无法重新创建它。
看看这个网站。 http://forums.silverlight.net/forums/p/51793/135450.aspx
所以。因此无法转换 TimeSpan。一种简单的方法是将时间跨度更改为字符串,然后将字符串发送过来。并使用 TimeSpan.TryParse(String);
如果您应用确切的格式,您可以使用 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 一起使用。
这些答案都已经过时了,所以我想我会提供一个更新的更好的答案。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