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 版。