1、json转model的核心设计思想就是使用runtime+递归的思想
runtime的思想:
第一步:取出类里面的所有成员变量
1、 Ivar* ivarList =class_copyIvarList(className, &count);
第二步:遍历ivarList,获取每个成员变量的名称和类型
for(inti =0; i
//根据下标获取成员变量
Ivarvar = ivarList[i];
//获取成员变量的名字
NSString * propertyName = [NSString stringWithUTF8String:ivar_getName(var)];
//获取成员变量的类型
NSString * type = [NSString stringWithUTF8String:ivar_getTypeEncoding(var)];
//去掉“_”方便取出dict中的数值
NSString* dictKey = propertyName;
if([propertyNamehasPrefix:@"_"]) {
dictKey = [propertyNamestringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@""];
}
//简化属性的数据类型
if(![typeisEqualToString:@"f"]) {
type = [typestringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@""];
type = [typestringByReplacingCharactersInRange:NSMakeRange(type.length-1, 1) withString:@""];
}
第三步:判断成员变量的类型
(1)如果是成员变量是NSString,NSNumber,float 等基本数据类型
则可以直接取出json里面的value赋值给model
(1)如果是成员变量是array
1、array包含的是基础的数据类型,则可以直接取出json里面的value赋值给model
2、array包含的是其他的自定义的model,这个时候则需要采用递归的方法
(2)如果是成员变量是dict这个时候也需要递归的方法
建议:创建模型的时候不要创建float,用NSnumber替换,使用float会出现进度不准确的问题
涉及到float类型数据计算的问题,建议将NSnumber转化成NSDecimalNumber,然后使用NSDecimalNumber提供的方法计算
网友评论