Objective c 从NSNumber序列化布尔值的Restkit

Objective c 从NSNumber序列化布尔值的Restkit,objective-c,serialization,restkit,nsnumber,Objective C,Serialization,Restkit,Nsnumber,其中一个托管对象具有一个由NSNumber类型表示的属性“isMember”。当通过RestKit序列化到Json post正文时,它总是给出0/1,而不是YES/NO或true/false。当从json结果映射到对象时,RestKit能够成功地将是/否转换为NSNumber。强制将布尔属性序列化为YES/NO或true/false的方法是什么 Serialize: 0 -> 0, 1 -> 1 Deserialize : YES/true -> 1, NO/false -&

其中一个托管对象具有一个由NSNumber类型表示的属性“isMember”。当通过RestKit序列化到Json post正文时,它总是给出0/1,而不是YES/NO或true/false。当从json结果映射到对象时,RestKit能够成功地将是/否转换为NSNumber。强制将布尔属性序列化为YES/NO或true/false的方法是什么

Serialize: 0 -> 0, 1 -> 1

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

在NSNumber表示法中,0表示否,1表示是;此外,BOOL是一种整数兼容类型,通常是无符号字符。这里没有矛盾。

在NSNumber表示法中,0相当于no,1相当于YES;此外,BOOL是一种整数兼容类型,通常是无符号字符。这里没有矛盾。

您可以使用委托方法之一手动更改值:

- (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;
}
-(void)objectLoader:(RKObjectLoader*)objectLoader didSerializeSourceObject:(id)sourceObject to serialization:(inout id*)serialization
{
NSMutableDictionary*参数=((NSDictionary*)*序列化);
NSNumber*值=[params objectForKey:@“myBoolean”];
[params setObject:value.boolValue?@“true”:@“false”forKey:@“myBoolean”];
*序列化=参数;
}
更新


我发现,只有当您将正文作为普通文本/html参数发送时,这才有效。将RKObjectManager的serializationMIMEType设置为RKMIMETypeJSON时,序列化对象将是作为NSData的json。在这种情况下,您仍然可以操作序列化对象,但必须解析json,更改它,然后再次序列化它。

您可以使用委托方法之一手动更改值:

- (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;
}
-(void)objectLoader:(RKObjectLoader*)objectLoader didSerializeSourceObject:(id)sourceObject to serialization:(inout id*)serialization
{
NSMutableDictionary*参数=((NSDictionary*)*序列化);
NSNumber*值=[params objectForKey:@“myBoolean”];
[params setObject:value.boolValue?@“true”:@“false”forKey:@“myBoolean”];
*序列化=参数;
}
更新


我发现,只有当您将正文作为普通文本/html参数发送时,这才有效。将RKObjectManager的serializationMIMEType设置为RKMIMETypeJSON时,序列化对象将是作为NSData的json。在这种情况下,您仍然可以操作序列化对象,但必须解析json,更改它,然后再次序列化。

0和1相当于NO和YES,BOOL是一个整数兼容类型。有什么问题吗?是的,你是对的。我仔细检查了Json文档,发现是相同的。0和1相当于NO和YES,BOOL是一个整数兼容类型。有什么问题吗?是的,你是对的。我仔细检查了Json文档,发现了同样的问题。问题是在Json中BOOL被序列化为0或1。但是,向其发送json的服务器预期为true或false。问题是在json中BOOL被序列化为0或1。但是,向其发送json的服务器预期为true或false。