Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Json序列化/反序列化TimeSpan_C#_Web Services_Json - Fatal编程技术网

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

C# 使用Json序列化/反序列化TimeSpan,c#,web-services,json,C#,Web Services,Json,我正在尝试反序列化/序列化timespan 但是当json被发送时,它被设置为00:00:00 这可能吗?我发现了,显然这是MS的设计缺陷 因为TimeSpan不能是无参数对象。XML无法重新创建它 看看这个网站。 所以。因此,无法转换TimeSpan。一个简单的方法是 将timespan更改为字符串,然后将字符串发送过来。 并使用TimeSpan.TryParse(字符串) 如果应用确切的格式,则可以使用时间跨度。格式为:“0.00:00:00.0000” 将时间跨度设置为30分钟 var

我正在尝试反序列化/序列化timespan

但是当json被发送时,它被设置为00:00:00
这可能吗?

我发现了,显然这是MS的设计缺陷

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

看看这个网站。

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

如果应用确切的格式,则可以使用时间跨度。格式为:“0.00:00:00.0000”

将时间跨度设置为30分钟

var jsonData = JSON.stringify({
    myDataObject: {
         TimeSpanValue : "0.00:" + $("#InputWithMinVal").val() + ":00.0"
    }
});
这个解决方案对我有效。我将MVC4.0与.Net framework 4.0一起使用。

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

{"PassedTimeSpan":"P1DT2H3M4S"}
上面显示的值为1天2小时3分钟4秒

所以看起来格式是:

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

其中:

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


这些答案都过时了,所以我想我会提供一个更新的更好的答案。现在直接支持.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

您使用哪个序列化程序?JavaScriptSerializer?DataContractJsonSerializer?你能发布一个不起作用的小代码示例吗?我使用Newtonsoft.json.jsonconvert。所以我要做的就是。序列化对象(TimeSpan);XML与你的问题有什么关系?@Crisfole我认为他指的不是“XML”,而是他正在使用的任何序列化程序(许多序列化程序同时序列化为XML和JSON)。感谢你写下通用模板!基于此,我可以编写下一个函数:formatTime=function(jsonTime){var re=/-?P(?::::(\d+d)?((\d+H)?((\d+S)?)?/;var timeArray=re.exec(jsonTime);var H=timeArray[1]==未定义?:timeArray[1];var hr=“00”+H;var hour=hr.substr(hr.length-2)var m=timeArray[2]==未定义?“:timeArray[2];var min=“00”+m;var minute=min.substr(min.length-2,2);return hour+”:“+minute;}我在这篇文章中没有提到moment.js或任何javascript。