JSON 中带有 Mantle 的对象:忽略 属性
Object from JSON with Mantle: ignore a property
我的应用程序从 JSON 创建了一些 ObJC 对象。一切正常,直到我向我的 ObjC 模型 class 添加了一个新的 属性,它在 JSON.
中没有对应的模型
我已经配置映射如下:
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"firstName" : @"firstname",
@"middleName" : @"middlename",
@"lastName" : @"lastname",
// etc.
@"phoneNumber" : NSNull.null // no JSON data for this one
};
}
但是我在 Mantle 中遇到断言失败,在 MTLJSONAdapter initWithModelClass
中:“phoneNumber 必须映射到 JSON 键路径或 JSON 键数组路径,得到:null."
这是我创建模型对象的方式:
MyData *myData = [MTLJSONAdapter modelOfClass:[MyData class]
fromJSONDictionary:json error:&error];
如何让数据 class 中的 phoneNumber
属性 不映射到 JSON 值?
只是不要指定其映射到 + JSONKeyPathsByPropertyKey
。
最终没有为我工作(我不是从 JSON 对象解析),我发现子类化 encodingBehaviorsByPropertyKey
可以工作。头文件中的注释如下:
/// Determines how the +propertyKeys of the class are encoded into an archive.
/// The values of this dictionary should be boxed MTLModelEncodingBehavior
/// values.
///
/// Any keys not present in the dictionary will be excluded from the archive.
///
/// Subclasses overriding this method should combine their values with those of
/// `super`.
///
/// Returns a dictionary mapping the receiver's +propertyKeys to default encoding
/// behaviors. If a property is an object with `weak` semantics, the default
/// behavior is MTLModelEncodingBehaviorConditional; otherwise, the default is
/// MTLModelEncodingBehaviorUnconditional.
+ (NSDictionary *)encodingBehaviorsByPropertyKey;
像这样从我的 MTLModel 子类中覆盖该方法最终对我有用:
+ (NSDictionary *)encodingBehaviorsByPropertyKey {
NSMutableDictionary *encodingBehaviorsDictionary = [[super encodingBehaviorsByPropertyKey] mutableCopy];
[encodingBehaviorsDictionary removeObjectForKey:@"propertyToBeOmitted"];
return encodingBehaviorsDictionary;
}
仅供参考:我使用的是 Mantle 2.1 版。
我的应用程序从 JSON 创建了一些 ObJC 对象。一切正常,直到我向我的 ObjC 模型 class 添加了一个新的 属性,它在 JSON.
中没有对应的模型我已经配置映射如下:
+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"firstName" : @"firstname",
@"middleName" : @"middlename",
@"lastName" : @"lastname",
// etc.
@"phoneNumber" : NSNull.null // no JSON data for this one
};
}
但是我在 Mantle 中遇到断言失败,在 MTLJSONAdapter initWithModelClass
中:“phoneNumber 必须映射到 JSON 键路径或 JSON 键数组路径,得到:null."
这是我创建模型对象的方式:
MyData *myData = [MTLJSONAdapter modelOfClass:[MyData class]
fromJSONDictionary:json error:&error];
如何让数据 class 中的 phoneNumber
属性 不映射到 JSON 值?
只是不要指定其映射到 + JSONKeyPathsByPropertyKey
。
encodingBehaviorsByPropertyKey
可以工作。头文件中的注释如下:
/// Determines how the +propertyKeys of the class are encoded into an archive.
/// The values of this dictionary should be boxed MTLModelEncodingBehavior
/// values.
///
/// Any keys not present in the dictionary will be excluded from the archive.
///
/// Subclasses overriding this method should combine their values with those of
/// `super`.
///
/// Returns a dictionary mapping the receiver's +propertyKeys to default encoding
/// behaviors. If a property is an object with `weak` semantics, the default
/// behavior is MTLModelEncodingBehaviorConditional; otherwise, the default is
/// MTLModelEncodingBehaviorUnconditional.
+ (NSDictionary *)encodingBehaviorsByPropertyKey;
像这样从我的 MTLModel 子类中覆盖该方法最终对我有用:
+ (NSDictionary *)encodingBehaviorsByPropertyKey {
NSMutableDictionary *encodingBehaviorsDictionary = [[super encodingBehaviorsByPropertyKey] mutableCopy];
[encodingBehaviorsDictionary removeObjectForKey:@"propertyToBeOmitted"];
return encodingBehaviorsDictionary;
}
仅供参考:我使用的是 Mantle 2.1 版。