-
-
[原创]在iOS开发中,一种自动的将自定义类序列化为JSON的方法
-
发表于:
2013-3-17 12:12
4915
-
[原创]在iOS开发中,一种自动的将自定义类序列化为JSON的方法
近几年一直做iOS应用相关的开发,虽然对安全方面很感兴趣,可是没什么安全方面原创的东西,发一篇应用开发相关的原创文章,希望对大家有帮助,也希望早日成为看雪大家庭的正式成员:)
第一次发帖,如有不合适的地方请大家多包涵。
----------------------------------文章开始的分割线----------------------------------
最近因为项目需求,需要将一些自定义的类序列化为JSON,网上有很多好用的第三方序列化工具,但都只能自动序列化一些基本类型,如NSNumber,NSString与NSDictionary这种,没有一种第三方工具提供直接将自定义类序列化的方法(至少据我所知:),而对于这种序列化自定义的类的需求,网上能查到的方法只有将自定义的类手动的转存为一个NSDictionary,然后再使用第三方工具来序列化。例如对于一个类Foo,有如下定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | @interface Foo : NSObject
{
NSString *_property1;
NSString *_property2;
}
@property(nonatomic,retain)NSString *property1;
@property(nonatomic,retain)NSString *property2;
@implementation Foo
@synthesize property1 = _property1;
@synthesize property2 = _property2;
- ( id )init
{
self = [super init];
if (self)
{
_property1 = @ "haha" ;
_property2 = @ "hehe" ;
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
|
要序列化它的方法只有:
1 2 3 4 5 6 7 8 9 10 11 | Foo *foo = [[Foo alloc] init];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
foo.property1,@ "property1" ,
foo.property2,@ "property2" ,
nil];
[[JSONSerializer serializer] serializer:dict];
|
这种方法的缺陷在于太不灵活,每一次序列化的时候都需要写很多重复的代码,上面的代码还没有考虑属性值为nil的情况(因为当属性值为nil时,NSDictionary会认为初始化结束)。因为在JAVA中有工具通过反射机制可以实现自动的序列化自定义类,于是抱着试一试的心态,开始寻找Objective-C中对应的方法。功夫不负苦心人,一位stackoverflow上的仁兄的回复提醒了我,iOS中的有Runtime Programming这样一种技术,通过阅读相应的文档,最终我找到了解决的方法。
[注意]看雪招聘,专注安全领域的专业人才平台!