自动对象序列化和网络数据解析,数据模型和字典的互转

常用场景:
将网络请求Json数据、NSDictionary、数组,映射为数据模型。
将数据模型对象序列化成字典保存
特性: 实现对象正向反向映射, 自动判断属性类型,使用字典对应的键值匹配属性名进行初始化赋值
支持类型 NSString, NSDate, NSNumber, NSArray, 基本常量, SSObject及其子类
对于NSDate,如果是数字自动按照时间戳进行转换, 如果是字符串,按照提供的时间格式转换
支持数组直接序列化成对象!
实现: 利用的消息机制来实现此功能

Objective-C中的runtime是经常问到的一个问题,一般大公司面试,相关runtime的问题是必不可少的。,那什么是Runtime呢?
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。具体Runtime的一些信息大家就去Google下吧。在这里就不为大家多多介绍了。
那来谈谈我这个小框架是怎么实现的吧。首先来看一下调用。


自动对象序列化和网络数据解析,数据模型和字典的互转
文章图片
图中的Info类必须是要继承本框架的XJsonObject.h,当执行objectWithDictionary:方法调用时,XJsonObject会通过Runtime的class_copyPropertyList 来获取数据模型的属性列表,将会得到一个数据模型属性的信息数组。当拿到这个数组后,你就可以为所欲为了,做你想做的事情。通过property_getName、property_getAttributes拿到属性名与类型等信息。当拿到属性、属性类型,以及传递进来的Dictionary数据,解析赋值那不就是拈手而来。具体的逻辑与实现就不过多介绍了,大家看代码更容易理解。https://github.com/BerXiu/XJsonObject
自动对象序列化和网络数据解析,数据模型和字典的互转
文章图片
引用:
pod 'XJsonObject'
github:https://github.com/BerXiu/XJsonObject
个人学习笔记,有更好的方法和建议,欢迎大神们指教一下。
【自动对象序列化和网络数据解析,数据模型和字典的互转】如有关于runtime的其它好的框架,希望大家多多安利。谢谢~

    推荐阅读