JSONModel开发随想
Posted AC自动机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSONModel开发随想相关的知识,希望对你有一定的参考价值。
反序列化解析赋值的基本思想
JSON 支持的序列化数据类型: string/number/object/array/true/false/null
string 判断同名属性数据类型是否一致,一致则赋值
number 因为number 是obj对象,封装了各种基本数据类型(int/float/double/unsigned ...) 为了做到精准赋值,还需要进行二次细分类型
array 遍历节点赋值
object 对应对象类型,反射判断能否创建,若能创建则把object数据传入递归解析赋值 (组合模式)
true/false 要求属性类型为布尔类型
null continue 跳过
健壮性
自带的JSON反序列化,有合法性检验。作为健壮性,一定要对入参做一下校验 `NSJSONSerialization isValidJSONObject:`
赋值范围
获取iVar的时候,要考虑到继承。所以iVar列表应该也要包括父类的属性。 但不包括runtime绑定的属性。
因为我们使用的是KVC技术,所以要确保使用到正确的setter(存在属性声明 setter覆盖的问题)
赋值窘境
Number类型的赋值窘境:
来自JSON的字段值,读值如果是正值也不能说明 一定是无符号。 对应的,如果读值是负值,那么一定不是无符号
从JSON中 取值如果是Number类型,可以使用NSValue objCType方法获取再细分类型的信息。但这是 必要不充分条件!
比如 JSON读值出来是浮点数,我们并不知道是float还是double,但若要付给整型属性,那一定是不对的。
读值出来是整型的话,付给浮点属性也未必不对。
所以存在这样一个问题:若读值是无符号数值 赋值给整型,会有数据溢出的现象,虽然不会崩溃,但赋值的结果是预料不到的。
以上是关于JSONModel开发随想的主要内容,如果未能解决你的问题,请参考以下文章