我正在消耗不断发展的JSON。我最近开始使用Mantle编写代码来使用JSON。对我想做的事情来说,这似乎是一个非常好的选择。但是,似乎如果使用的JSON具有模型中不存在的属性,则JSON转换将失败。我正在使用[MTLJSONAdapter modelOfClass:fromJSONDictionary:error:];
调用来映射JSON。
提前致谢,
答案 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调用并手动应用转换。