如何以JSON格式传递TimeSpan值?

时间:2012-02-21 08:51:30

标签: c# json wcf

我使用Fiddler来测试我的WCF Rest。我总是得到

HTTP/1.1 400 Bad Request  

有这个帖子值:

{
    "session":{
        "Session":"088a688d-ea69-4264-9266-381e9e540d00",
        "LoginID":"testid",
        "Serial":"testserial"
    },
    "sub":[
        {
            "Type":0,
            "StartDate":"\/Date(1319731200000+0800)\/",
            "EndDate":"\/Date(1319731200000+0800)\/",
            "Duration":"12:12:12"
        }
    ]
}  

我在“持续时间”值中收到错误。我一直在网上搜索但没有运气。
我希望我能在这里找到答案。非常感谢!

2 个答案:

答案 0 :(得分:4)

简单的方法是将时间跨度解析为字符串,并使用其静态“解析”例程转换为TimeSpan。

使用JSON和WCF,你依靠JSON Serialiser来来回转换对象,不幸的是,一旦你开始“移动”本地对象类型,即字符串,数字和特定对象,它往往会窒息,除非你使用确切的格式。

就个人而言,我没有通过DataContractJsonSerializer传递Timespan的经验,但是this post将突出显示确切的格式以及是否可能

答案 1 :(得分:-1)

什么是“sub”的.NET类型?它看起来像某种类型的集合或数组类型; .NET期望这些元素具有什么类型?该类型是否具有Type,StartDate,EndDate和Duration属性?它是否有任何标有[IsRequiredAttribute]但不存在的其他属性?

如果你制作一个新的DataContractJsonSerializer(type = TimeSpan),并尝试反序列化字符串“12:12:12”,那么会发生什么?

我还没有给你答案 - 但我认为做这些练习现在不能解决你的问题,但它也有助于诊断你在反序列化这个字符串时可能遇到的未来错误。

另请参阅Deserialize array values to .NET properties using DataContractJsonSerializer了解一些指示