JSONModel命名中的驼峰(CamelCase)与下划线 (UnderscoreCase)

后台返回的数据key命名方式不统一,有camel,有underscore,我想统一用camel命名,于是用了 [ JSONModel setGlobalKeyMapper :[ JSONKeyMapper mapperFromUnderscoreCaseToCamelCase ]];但是接着就出现了一个问题,后台返回的是camel方式的字段我取不到了。。。于是去看源码, [ JSONKeyMapper mapperFromUnderscoreCaseToCamelCase ]这个方法会返回两个block:toModelBlock和toJSONBlock。toJSONModel会将声明的property属性名中的"大写字母"替换为"_(对应的小写字母)”。我用的是 [ self mergeFromDictionary :dict useKeyMapping : YES error : nil ], 然后在 -( BOOL )__importDictionary:( NSDictionary *)dict withKeyMapper:( JSONKeyMapper *)keyMapper validation:( BOOL )validation error:( NSError **)err方法给model赋值时,用转换后的underscore的key取 dict中的值,这是如果后台返回的是camel的key,则取出的值为空。。。
原因找到了,解决方案有一个:
1、修改源码,或者基类重写 -( BOOL )__importDictionary:( NSDictionary *)dict withKeyMapper:( JSONKeyMapper *)keyMapper validation:( BOOL )validation error:( NSError **)err方法, 以camel和underscore两种方式去取即:
改为:
但是修改源码的话一更新第三方库就需要重写。。。建议创建一个基类BaseJSONModel重写方法
2、利用黑魔法runtime实现方法替换,

你可能感兴趣的:(JSONModel命名中的驼峰(CamelCase)与下划线 (UnderscoreCase))