美文网首页程序员
自动对象序列化和网络数据解析,数据模型和字典的互转

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

作者: XiuBer | 来源:发表于2016-09-02 11:39 被阅读0次

    常用场景:

    将网络请求Json数据、NSDictionary、数组,映射为数据模型。

    将数据模型对象序列化成字典保存

    特性:

    实现对象正向反向映射, 自动判断属性类型,使用字典对应的键值匹配属性名进行初始化赋值

    支持类型 NSString, NSDate, NSNumber, NSArray, 基本常量, SSObject及其子类

    对于NSDate,如果是数字自动按照时间戳进行转换, 如果是字符串,按照提供的时间格式转换

    支持数组直接序列化成对象!

    实现:

    利用<objc/runtime>的消息机制来实现此功能

    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的其它好的框架,希望大家多多安利。谢谢~

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ihzcettx.html