原帖之前写在cocoachina里,现在稍微修改了点搬过来作为第一篇博客吧 http://www.cocoachina.com/bbs/read.php?tid=125232
主要修改的在于之前是用特殊字符替换的方法避开转义符,现在是判断后直接将嵌套的实体类序列化字符串插入到最终的jsonString里,这样就避免了一些不必要的偶然性了.
上传的DEMO在http://download.csdn.net/detail/heartundersugarbush/4928841
由于项目需要在做ios客户端时,与服务器通信是基于webservice的,而且数据交互都是使用json序列化后的字符串,这样就只需要双方解析json字符串为一个实体类就可以得到所需要的数据(至于与xml通信方式比较的优劣我在此不评论)。
而这种方式在java服务器端以及我之前做的android客户端都有成熟的框架,可以对自定义的复杂实体类进行json序列化以及对json字符串反序列化为目标实体类对象!在ios端貌似没发现(如果有谁知道麻烦指点下啊!),而且本人刚入门ios开发,基本语法都不怎么了解,查找了好多资料也无头绪,对于自定义实体类的序列化工具也没找到,更别说反序列化工具了。
摸索几天后,借鉴网上以为仁兄发布的序列化普通实体类的方法才得以实现了我所需要的功能,引用下这位兄弟的成果, http://www.cocoachina.com/bbs/read.php?tid=86667&page=1 他是利用了obj c runtime将简单的自定义实体类对象转为了json字符串,但我是纯新手对obj c runtime之类的不怎么了解,我也没时间深究咯。
先说下我对于ios中生成json字符串的理解,ios中利用了NSDictionary这种类型,先将一个个键值对构造成一个NSDictionary对象,然后再利用NSJSONSerialization 将其转为NSData类型数据,之后将其转为NSString字符串,这样便可以生成json格式的字符串了;
在详细查看了上面那位前辈的代码后,发现对于项目中的许多普通实体类的序列化也算减轻了不少工作量,但是对于复杂的嵌套实体类这种方式就失败了,更别说里面还包含NSArray的实体类数组名了,而我们的项目就刚好需要如此,上报数据时本来就包含了很多复杂字段的。
于是只好将复杂实体类中嵌套实体类先序列化后再用最基本的方法构造键值对,生成NSDictionary。最后我将生成的字符串打印出来,问题来了,下面是我得到的字符串:
{"customerName":"