首页
社区
课程
招聘
6
[原创]在iOS开发中,一种自动的将自定义类序列化为JSON的方法
发表于: 2013-3-17 12:12 4915

[原创]在iOS开发中,一种自动的将自定义类序列化为JSON的方法

2013-3-17 12:12
4915

近几年一直做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这样一种技术,通过阅读相应的文档,最终我找到了解决的方法。




[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 6
支持
分享
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
2024-5-31 07:19
心游尘世外
为你点赞~
2024-5-31 04:15
QinBeast
为你点赞~
2024-5-31 04:05
飘零丶
为你点赞~
2024-4-3 00:06
shinratensei
为你点赞~
2024-2-5 00:03
PLEBFE
为你点赞~
2023-3-7 00:35
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册