我使用 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
值的错误。我一直在网上搜索但没有运气。简单的方法是将时间跨度解析为字符串,并使用其静态“解析”例程转换为 TimeSpan。
使用 JSON 和 WCF,您依赖 JSON 序列化器来来回转换对象,不幸的是,一旦您开始“移动”远离本机对象类型(即字符串、数字)并转换为特定对象,除非您使用准确的格式。
就个人而言,我没有通过 DataContractJsonSerializer 传递 Timespan 所需格式的经验,但是这篇文章将突出显示确切的格式以及是否可能
“sub”的 .NET 类型是什么?它看起来像某种集合或数组类型; .NET 期望这些元素具有什么类型?该类型是否具有 Type、StartDate、EndDate 和 Duration 属性?它是否还有任何其他标有 [IsRequiredAttribute] 但不存在的属性?
如果您制作一个新的 DataContractJsonSerializer(type = TimeSpan),并尝试仅反序列化字符串“12:12:12”,那么会发生什么?
我还没有给你答案——但我认为做这些练习不应该解决你现在的问题,但它也将有助于诊断你在反序列化该字符串时可能遇到的未来错误。
另请参阅 使用 DataContractJsonSerializer 将数组值反序列化为 .NET 属性以获取一些指针