在我的情況WCF RESTful服務,我有如下一個Web服務,不接受JSON輸入
[OperationContract]
[WebInvoke(UriTemplate = "services/CreatePerson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string CreatePerson(string data);
它期待一個JSON輸入。雖然我通過傳遞一個JSON字符串作爲請求的身體下面,
"{"personName":"Joe", "source":"I", "address":"KK Road"}"
測試使用Fiddler此服務,並請求頭作爲
User-Agent: Fiddler
Content-Type: application/json;charset=utf-8
Host: localhost
Content-Length: 54
它不打的服務方法斷點調試時。
同時其工作以下JSON如下(用單引號之前的JSON代替雙引號),
"{'personName':'102', 'source':'I', 'address':'KK Road'}"
服務方法不採取JSON字符串輸入,因爲它工作得很好,如果我通過輸入如「測試」 ..
哪裏是實際的問題,請幫我找出....
那麼,將雙引號更改爲單引號後會出現什麼問題?你也可以直接將json對象映射到你的方法參數,如果你傳入這樣一個對象:{「data」:「somevalue」} – Jomit
「{'personName':'102','source':'I','地址':'KK Road'}「輸入正在工作,但是在消費者和服務端管理這個輸入相當無禮,因爲android和iphone應用程序所使用的服務應該通過將雙引號替換爲單引號來重寫代碼(如獲取json字符串時,使用雙引號將他們的類序列化爲json)以及我需要將其替換爲雙引號以反序列化到相應類的服務。 –
好的。那麼爲什麼你需要在一個參數中傳遞數據呢?我的意思是對於上面的例子,你可以用3個參數創建服務方法。然後從iPhone或Android客戶端,您可以創建一個常規對象,將其序列化爲JSON並將其傳遞給服務。只要對象具有相同的參數名稱,WCF就會適當地映射它。 – Jomit