2012-02-21 53 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