2012-07-08 37 views
0

託管對象之一有一個由NSNumber類型表示的屬性'isMember'。當通過RestKit序列化到Json post主體時,它總是給出0/1而不是YES/NO或true/false。從json結果映射到對象時,RestKit能夠成功地將YES/NO轉換爲NSNumber。什麼是強制將布爾型屬性序列化爲YES/NO或true/false?Restkit序列化來自NSNumber的布爾值

Serialize: 0 -> 0, 1 -> 1 

Deserialize : YES/true -> 1, NO/false -> 0 
+0

0和1相當於NO和YES,BOOL是整數兼容類型。有什麼問題? – 2012-07-08 05:52:36

+0

是的,你說得對。我仔細檢查了Json文檔並發現相同。 – angelokh 2012-07-08 06:15:21

回答

3

在的NSNumber表示,0對應於NO,和1相當於YES;此外布爾是一個整數兼容的類型,通常是一個無符號的字符。這裏沒有矛盾。

+4

問題是BOOL在json中序列化爲0或1。但是,json所發送的服務器會期望真或假。 – lammert 2012-11-14 11:50:25

3

您可以使用委託方法之一手動更改值:

- (void)objectLoader:(RKObjectLoader *)objectLoader didSerializeSourceObject:(id)sourceObject toSerialization:(inout id<RKRequestSerializable> *)serialization 
{ 
    NSMutableDictionary *params = ((NSDictionary*)*serialization).mutableCopy; 
    NSNumber *value = [params objectForKey:@"myBoolean"]; 
    [params setObject:value.boolValue ? @"true" : @"false" forKey:@"myBoolean"]; 
    *serialization = params; 
} 

更新

我發現,這隻能在你發送的身體正常的text/html參數。當設置序列化MIME類型RKObjectManagerRKMIMETypeJSON然後序列化對象將是json作爲NSData。在這種情況下,你仍然可以操縱序列化對象,但是你必須解析json,改變它然後再次序列化它。