我有从MTLModel继承的MyModel (使用GitHub Mantle pod)。MyModel.h
#import <Mantle/Mantle.h>
@interface MyModel : MTLModel <MTLJSONSerializing>
@property (nonatomic, copy, readonly) NSString *UUID;
@property (nonatomic, copy) NSString *someProp;
@property (nonatomic, copy) NSString *anotherProp;
@endMyModel.m
#import "MyModel.h"
@implementation MyModel
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"UUID": @"id",
@"someProp": @"some_prop",
@"anotherProp": @"another"
};
}
}
@end现在我想使用AFNetworking将JSON发送到后端。在此之前,我将模型实例转换为JSON NSDictionary,以便在我的请求中用作参数/主体有效负载。
NSDictionary *JSON = [MTLJSONAdapter JSONDictionaryFromModel:myModel];但是这个JSON由奇怪的"“字符串组成,这些字符串表示我的模型的属性为零。相反,我希望Mantle省略这些键/值对,只生成一个只包含非nil或NSNull.null属性的JSON。
发布于 2015-11-12 03:05:43
覆盖- dictionaryValues没有给我提供预期的行为
所以我为MTL基类创建了一个方法
- (NSDictionary *)nonNullDictionaryWithAdditionalParams:(NSDictionary *)params error:(NSError *)error {
NSDictionary *allParams = [MTLJSONAdapter JSONDictionaryFromModel:self error: &error];
NSMutableDictionary *modifiedDictionaryValue = [allParams mutableCopy];
for (NSString *originalKey in allParams) {
if ([allParams objectForKey:originalKey] == NSNull.null) {
[modifiedDictionaryValue removeObjectForKey:originalKey];
}
}
[modifiedDictionaryValue addEntriesFromDictionary:params];
return [modifiedDictionaryValue copy];
}发布于 2015-05-29 06:47:49
EDIT #2曾经适用于我以前的Mantle代码库。现在,我必须执行以下操作才能继续使用EDIT #2:
在文件MTLJSONAdapter.m中,替换以下行:
NSDictionary *dictionaryValue = [model.dictionaryValue dictionaryWithValuesForKeys:propertyKeysToSerialize.allObjects];使用
NSDictionary *dictionaryValue = model.dictionaryValue;以上是我目前要解决的问题
{ }而不是
{
"AddressLine2" : null,
"City" : null,
"ZipCode" : null,
"State" : null,
"AddressLine1" : null
}https://stackoverflow.com/questions/18961622
复制相似问题