使用Json序列化/反序列化TimeSpan

我正在尝试反序列化/序列化一个时间跨度,

但是当json发送时它设置为00:00:00这是否可能呢?

谢谢! -Kevin

顺便说一句,语言是C#,使用Visual Studio 2008。

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

{"PassedTimeSpan":"P1DT2H3M4S"} 

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

所以看起来格式是:

[ – ] P [{天} d] [T [{小时} H] [{分钟} M] [{秒} S]]

哪里:

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

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

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

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

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

这些答案都已过时,所以我想我会提供更新的更好答案。 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 

如果您应用确切的格式,则可以使用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。

 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; }