如何以JSON格式传递TimeSpan值?

问题描述 投票:0回答:2

我使用 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"
        }
    ]
}  

我得到

Duration
值的错误。我一直在网上搜索但没有运气。
我希望我能在这里找到答案。非常感谢!

c# json wcf
2个回答
3
投票

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

使用 JSON 和 WCF,您依赖 JSON 序列化器来来回转换对象,不幸的是,一旦您开始“移动”远离本机对象类型(即字符串、数字)并转换为特定对象,除非您使用准确的格式。

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


-1
投票

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

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

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

另请参阅 使用 DataContractJsonSerializer 将数组值反序列化为 .NET 属性以获取一些指针

© www.soinside.com 2019 - 2024. All rights reserved.