Mantle是否要求完全指定模型?

时间:2015-03-29 21:50:48

标签: ios json mapping

我正在消耗不断发展的JSON。我最近开始使用Mantle编写代码来使用JSON。对我想做的事情来说,这似乎是一个非常好的选择。但是,似乎如果使用的JSON具有模型中不存在的属性,则JSON转换将失败。我正在使用[MTLJSONAdapter modelOfClass:fromJSONDictionary:error:];调用来映射JSON。

提前致谢,

1 个答案:

答案 0 :(得分:2)

仔细检查代码后,Mantle确实要求所有json属性映射到模型中的某些内容。否则,将发生的事情是该属性将抛出异常。

在MTLModel的MTLValidateAndSetValue内,它在设置之前不会检查属性是否存在。

@try {
    if (![obj validateValue:&validatedValue forKey:key error:error]) return NO;

    if (forceUpdate || value != validatedValue) {
        [obj setValue:validatedValue forKey:key];
    }

    return YES;
} @catch (NSException *ex) {
    NSLog(@"*** Caught exception setting key \"%@\" : %@", key, ex);

    // Fail fast in Debug builds.
    #if DEBUG
    @throw ex;
    #else
    if (error != NULL) {
        *error = [NSError mtl_modelErrorWithException:ex];
    }

    return NO;
    #endif
}

如果您使用的JSON无法保证与您的型号匹配,则会出现问题 我最终为我的工作做了一个自定义JSON表示,让构造函数根据传入的JSON而不是模型构建对象。它将首先遍历json属性并尝试使用隐式映射将它们直接映射到模型属性。如果有任何需要特殊处理的属性,则由子类覆盖init调用并手动应用转换。