2013-10-13 88 views
1

我對Restkit相當新,但到目前爲止,它對我的​​大多數網絡需求都使用0.20.3版本非常有效。帶有裸JSON響應對象的Restkit

我在使用WCF webhttp綁定使用C#編寫的基於json的API時,值得一提的是我完全不能控制這個API,並且不能改變返回的json的格式,我需要使用什麼我有。

的問題是,當API返回一個簡單的類型如int,雙或字符串作爲響應JSON響應是如下面完全裸露..

串響應

"hello world" 

INT響應

2342524 

的這兩個示例響應具有應用/ JSON的內容類型

我試圖使用restkit獲取客戶訂單數的API端點。 該請求的代碼如下,我期待一個NSNumber作爲響應,但它產生一個錯誤,因爲它的原始解包類型,我不能提供一個映射。

[manager getObject:nil 
        path:@"/service/http/CountOrders?CustomerId=324534413" 
      parameters:nil 
       success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){ 
        RKLogInfo(@"order count: %@",mappingResult); 

       } failure:^(RKObjectRequestOperation *operation, NSError *error) { 

        RKLogError(@"Operation failed with error: %@", error); 
       }]; 

而且我找回誤差

restkit.network:RKResponseMapperOperation.m:317 Failed to parse response data: Loaded an unprocessable response (200) with content type 'application/json' 
restkit.network:RKObjectRequestOperation.m:213 GET 'http://CUSTOMERDOMAIN/service/http/CountOrders?CustomerId=324534413' 
(200 OK/0 objects) 
[request=0.2263s mapping=0.0000s total=0.2386s]: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1017 "Loaded an unprocessable response (200) with content type 'application/json'" 

UserInfo=0x8e1a660 {NSErrorFailingURLKey=http://CUSTOMERDOMAIN/service/http/CountOrders?CustomerId=324534413, NSUnderlyingError=0x8e1b1a0 
"The operation couldn’t be completed. (Cocoa error 3840.)", 
NSLocalizedDescription=Loaded an unprocessable response (200) with content type 'application/json'} 
hj 

有解析應對一個NSNumber來彌補這一邊緣情況的方法嗎? 我想要一個自定義的反序列化處理程序可能是最好的方式,如果這是可能的,但正如我所說我是restkit的新手,並且基本上尋找正確的方向推動。

回答

0

一個自定義序列化器可以工作,但一個簡單的方法可能是跳過RestKit的請求與'簡單'的響應,並使用底層的AFNetworking類。那麼你不需要擔心序列化,你可以快速強制響應值。

+0

這可以工作,但我更願意使用restkit,因爲一些api調用具有簡單的整數響應類型,但也有複雜的請求類型,需要在到服務器的方式上進行json序列化。對於這些情況,堅持使用restkit會很有用。 –

+0

好吧,您可以使用對象管理器的'requestWithObject:method:path:parameters:'方法來做到這一點。它將映射要發送的對象,然後您可以將請求傳遞給AFNetworking。 – Wain

+0

聽起來像一個勝利者,謝謝Wain –