我正在尝试反序列化/序列化一个时间跨度,
但是当json发送时,它被设置为00:00:00 这甚至可以吗?
谢谢! -Kevin
顺便说一句,语言是C#,使用Visual Studio 2008。
答案 0 :(得分:9)
我尝试了#Jessycormier的方法,它对我不起作用。 我运行DataContractJsonSerializer来查看它会产生什么,我发现它给了我一个看起来更像这样的值。
{"PassedTimeSpan":"P1DT2H3M4S"}
上面显示的值是1天,2小时,3分钟和4秒。
所以看起来格式是:
[ - ] P [{天} d] [T [{小时} H] [{分钟} M] [{秒} S]]
其中:
- 表示负时间跨度,正值忽略 P必须是第一个字符(除非负时间值)
,可省略
T必须在时间跨度的时间部分之前。
[] =可选部分,如果为0.
答案 1 :(得分:5)
我明白了,显然这是一个MS设计缺陷......
由于TimeSpan不能是无参数对象。 XML无法重新创建它。
看看这个网站。 http://forums.silverlight.net/forums/p/51793/135450.aspx
因此。因此无法转换TimeSpan。一个简单的方法是 将时间跨度更改为字符串,然后将字符串发送过来。 并使用TimeSpan.TryParse(String);
答案 2 :(得分:4)
这些答案都已过时,所以我想我会提供更新的更好答案。 moment.js现在直接支持.NET Timespan
序列化格式。
从版本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
答案 3 :(得分:2)
如果您应用确切的格式,则可以使用TimeSpan。格式为:“0.00:00:00.0000”
将TimeSpan设置为30分钟
var jsonData = JSON.stringify({
myDataObject: {
TimeSpanValue : "0.00:" + $("#InputWithMinVal").val() + ":00.0"
}
});
此解决方案适合我。我正在使用MVC 4.0和.Net framework 4.0。
答案 4 :(得分:-1)
http://msdn.microsoft.com/en-us/library/bb412179.aspx
The JSON serializer throws a serialization exception for data contracts that have multiple members with the same name, as shown in the following sample code.
Copy
[DataContract]
public class TestDuplicateDataBase
{
[DataMember]
public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
[DataMember]
public new int field1 = 999;
}