【问题标题】:Ignore nil properties when serializing JSON using RestKit使用 RestKit 序列化 JSON 时忽略 nil 属性
【发布时间】:2014-07-31 03:14:09
【问题描述】:

我有这门课:

@interface MovieStatus : NSObject
@property (nonatomic, strong) NSNumber* seen;
@property (nonatomic, strong) NSNumber* watchlist;
@end

这两个属性都表示可选的可为空的布尔值。我通过RKObjectManager 使用RestKit 将此对象发送到服务器并创建了适当的映射。但是在序列化对象时,我无法从 POST 数据中跳过该属性。

例如这段代码:

RKLogConfigureByName("*", RKLogLevelTrace);

RKObjectManager* manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://www.example.com/v1"]];
manager.requestSerializationMIMEType = RKMIMETypeJSON;

RKObjectMapping* requestMapping = [RKObjectMapping requestMapping];
[requestMapping addAttributeMappingsFromArray:@[@"seen", @"watchlist"]];

RKRequestDescriptor* requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[MovieStatus class] rootKeyPath:nil method:RKRequestMethodPOST];
[manager addRequestDescriptor:requestDescriptor];

RKRoute* route = [RKRoute routeWithClass:[MovieStatus class] pathPattern:@"status" method:RKRequestMethodPOST];
[manager.router.routeSet addRoute:route];


MovieStatus* status = [[MovieStatus alloc] init];
status.seen = @(YES);
[manager postObject:status path:nil parameters:nil success:nil failure:nil];

正在发送 JSON:

{
  "seen": true,
  "watchlist": null
}

我想发送到哪里:

{
  "seen": true
}

谁能指出我该如何实现它?

【问题讨论】:

    标签: ios objective-c json restkit


    【解决方案1】:

    我通过将映射的assignsDefaultValueForMissingAttributes 设置为NO 解决了这个问题:

    requestMapping.assignsDefaultValueForMissingAttributes = NO;
    

    现在 JSON 请求不包含 null 值。

    【讨论】:

    • 是否可以全局设置而不是为每个映射单独设置?
    • 你可以继承 RKObjectMapping
    • 这对我不起作用,我还认为这是默认设置为NO?我在stackoverflow.com/questions/31846262/… 发布了一个新问题
    • 有一个类似的属性assignsNilForMissingRelationships。请注意这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多