JSONModel开发随想

Posted AC自动机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSONModel开发随想相关的知识,希望对你有一定的参考价值。


反序列化解析赋值的基本思想


JSON 支持的序列化数据类型: string/number/object/array/true/false/null

  1.  string 判断同名属性数据类型是否一致,一致则赋值

  2.  number 因为number 是obj对象,封装了各种基本数据类型(int/float/double/unsigned ...) 为了做到精准赋值,还需要进行二次细分类型

  3.  array 遍历节点赋值

  4.  object 对应对象类型,反射判断能否创建,若能创建则把object数据传入递归解析赋值 (组合模式)

  5.  true/false 要求属性类型为布尔类型

  6.  null continue 跳过



健壮性

自带的JSON反序列化,有合法性检验。作为健壮性,一定要对入参做一下校验 `NSJSONSerialization isValidJSONObject:`



赋值范围

获取iVar的时候,要考虑到继承。所以iVar列表应该也要包括父类的属性。 但不包括runtime绑定的属性。

因为我们使用的是KVC技术,所以要确保使用到正确的setter(存在属性声明 setter覆盖的问题)


赋值窘境

Number类型的赋值窘境:

来自JSON的字段值,读值如果是正值也不能说明 一定是无符号。 对应的,如果读值是负值,那么一定不是无符号

从JSON中 取值如果是Number类型,可以使用NSValue objCType方法获取再细分类型的信息。但这是 必要不充分条件!

比如 JSON读值出来是浮点数,我们并不知道是float还是double,但若要付给整型属性,那一定是不对的。

读值出来是整型的话,付给浮点属性也未必不对。

所以存在这样一个问题:若读值是无符号数值 赋值给整型,会有数据溢出的现象,虽然不会崩溃,但赋值的结果是预料不到的。


以上是关于JSONModel开发随想的主要内容,如果未能解决你的问题,请参考以下文章

随想3

关于VR开发中的穿墙问题随想

第五章随想

.NET 20周年软件趋势随想

0302 随想

随想007:模块化代码