有很多关于SO的问题和答案,询问如何在目标c中将对象序列化。
上述链接中提到了以下3种方法。
1)使用NSJSONSerialization
将对象序列化为JSON。看起来不错但这要求所讨论的对象在其顶层是数组或字典。常见的解决方案是声明自定义toDictionary
或serialise
方法,该方法循环遍历属性并设置相关的键和值。
2)符合NSCoder
协议,有点像上面的方法,但似乎有一些混淆是否可以序列化为JSON或只是NSData
。
3)第三方图书馆。
我对采取什么方法感到有些困惑。我想序列化为JSON,有一些相互矛盾的答案,说明你可以使用NSCoder一些人说不。我知道第三方应用程序可以运行,但我宁愿实现像选项1或2这样简单的东西。
思想?
答案 0 :(得分:0)
使用1
,您基本上是从头开始编写基于JSON的NSCoder
实现。但是当然可行。
使用2
,我认为这可能是可能的,因为我认为NSCoder
的输出是some variant of XML(虽然压缩成二进制blob)。但是,我不知道这是否是一个很好的方法,因为格式是专有的,并不是真正意味着人类可编辑。在密钥和叶子节点方面,JSON允许的格式与NSCoder
格式之间可能存在不匹配,迫使您进行混乱的转换。
我一直在尝试做类似的事情,根据我的研究,我实际建议3
。使用类似Mantle的东西 - 一个经常更新的稳定,优化的框架 - 您可以准确指定模型对象如何序列化到JSON并从中反序列化。它甚至支持NSCoder
协议作为选项! (这是有效的解决方案1
,但由第三方审查和维护。)