2012-07-08 21 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,改变它然后再次序列化它。