2014-06-10 41 views
5

序列化JSON當我有這個類:忽略零特性採用RestKit

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

如果這兩個屬性表示可選爲空的布爾值。我使用RestKit通過RKObjectManager將此對象發送到服務器,並創建了適當的映射。但是當序列化對象時,我無法從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 
} 

任何人都可以點我如何我可以實現它嗎?

回答

9

我解決它通過映射的assignsDefaultValueForMissingAttributes設置爲NO

requestMapping.assignsDefaultValueForMissingAttributes = NO; 

現在JSON請求不包含null值。

+1

有沒有辦法在全局範圍內設置而不是爲每個映射單獨設置? – dirkoneill

+0

你可以繼承RKObjectMapping – VaporwareWolf

+1

這對我不起作用,我也認爲這是默認設置爲「NO」的意思嗎? 我已經發布了一個新的問題在http://stackoverflow.com/questions/31846262/how-do-i-ignore-empty-properties-on-posted-objects-using-restkit – Tim