2012-02-21 24 views
5

我使用Fiddler来测试我的WCF Rest。我总是如何以JSON格式传递TimeSpan值?

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" 
     } 
    ] 
} 

我得到了 '时间' 值的误差。我一直在网上搜索,但没有运气。
我希望我会在这里找到答案。非常感谢!

+0

? (反斜杠/正斜杠序列也有腥味。) – 2012-02-21 09:34:48

+0

我使用RequestFormat = WebMessageFormat.Json,但我确定StartDate和EndDate没有问题,我已经测试了很多次。 – fiberOptics 2012-02-21 10:08:30

+0

顺便说一句,我试图检索数据,我发现持续时间有这种价值,“持续时间”:PT20H8M,其中TimeSpan值:20:08:00,你是否熟悉这个?谢谢 – fiberOptics 2012-02-21 10:09:50

回答

4

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

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

就个人而言,我已经没有经过时间跨度的通过DataContractJsonSerializer需要什么格式的经历,但是this post将突出确切格式以及是否有可能

+0

感谢您的好解释。其实我正要将它们转换为字符串,然后再解析数据。但我仍然希望找到最简单的方法。 – fiberOptics 2012-02-22 01:15:46

-1

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

如果你打造了一个新的DataContractJsonSerializer(类型=时间跨度),并尝试反序列化只是字符串“十二时12分12秒”,那么,什么情况?

我不会给你一个答案 - 但是我觉得做这些练习不应该现在解决您的问题,但它也将帮助诊断您可以在这串的反序列化遇到未来的错误。

Deserialize array values to .NET properties using DataContractJsonSerializer见什么是您使用的代码生成和解析数据的一些指针

+0

谢谢,但我测试过很多次,肯定没有问题的属性和值除了“持续时间”值是一个TimeSpan类型,(我认为)Json无法序列化。 – fiberOptics 2012-02-22 01:18:46