将Model对象转换成json文本或者json二进制文件
https://github.com/casatwy/AnyJson
注意:经过测试,不能够直接处理字典或者数组
主要源码的注释
AJTransformer.h 与 AJTransformer.m
//
// AJTransformer.h
// AnyJson
//
// Created by casa on 14-9-19.
// Copyright (c) 2014年 casa. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol AJSerializable;
@interface AJSerializer : NSObject
/**
* 将对象转换成json二进制文件
*
* @param object 对象
*
* @return json二进制文件
*/
+ (NSData *)jsonDataWithObject:(id)object;
/**
* 将对象转换成json字符串
*
* @param object 对象
*
* @return json字符串
*/
+ (NSString *)jsonStringWithObject:(id)object;
+ (id)objectWithJsonData:(NSData *)jsonData targetObjectClass:(Class)targetObjectClass;
+ (id)objectWithJsonString:(NSString *)jsonString targetObjectClass:(Class)targetObjectClass;
@end
//
// AJTransformer.m
// AnyJson
//
// Created by casa on 14-9-19.
// Copyright (c) 2014年 casa. All rights reserved.
//
#import "AJSerializer.h"
#import "AJObject2JsonSerializer.h"
#import "AJJson2ObjectSerializer.h"
@implementation AJSerializer
#pragma mark - public method
+ (NSData *)jsonDataWithObject:(id)object
{
id basicObject = [AJObject2JsonSerializer serializeToBasicObject:object];
return [NSJSONSerialization dataWithJSONObject:basicObject options:0 error:nil];
}
+ (NSString *)jsonStringWithObject:(id)object
{
NSString *jsonString = [[NSString alloc] initWithData:[AJSerializer jsonDataWithObject:object] encoding:NSUTF8StringEncoding];
return jsonString;
}
+ (id)objectWithJsonData:(NSData *)jsonData targetObjectClass:(Class)targetObjectClass
{
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
return [AJJson2ObjectSerializer transformJsonObject:jsonObject toTargetObjectClass:targetObjectClass];
}
+ (id)objectWithJsonString:(NSString *)jsonString targetObjectClass:(Class)targetObjectClass
{
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
return [AJSerializer objectWithJsonData:jsonData targetObjectClass:targetObjectClass];
}
@end
Model类:
//
// Playground.h
// AnyJson
//
// Created by casa on 14-9-20.
// Copyright (c) 2014年 casa. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "OtherObject.h"
@interface Playground : NSObject
@property (nonatomic, assign) NSInteger testInteger;
@property (nonatomic, strong) OtherObject *otherObject;
@end
//
// OtherObject.h
// AnyJson
//
// Created by casa on 14-9-21.
// Copyright (c) 2014年 casa. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface OtherObject : NSObject
@property (nonatomic, assign) NSInteger testInteger;
@property (nonatomic, assign) BOOL isTest;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) char testChar;
@end
使用的源码:
ViewController.m
//
// ViewController.m
// AnyJson
//
// Created by casa on 14-9-19.
// Copyright (c) 2014年 casa. All rights reserved.
//
#import "ViewController.h"
#import "AnyJson.h"
#import "Playground.h"
#import "AJClassHelper.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Playground *playground = [[Playground alloc] init];
OtherObject *otherObject = [[OtherObject alloc] init];
otherObject.testInteger = 13;
otherObject.isTest = YES;
otherObject.name = @"casa";
otherObject.testChar = 'c';
playground.otherObject = otherObject;
NSString *jsonString = [AJSerializer jsonStringWithObject:playground];
NSLog(@"json string is %@", jsonString);
}
@end
打印的信息:
2015-01-04 20:52:18.399 AnyJson[3825:149779] json string is {"testInteger":0,"otherObject":{"isTest":true,"name":"casa","testInteger":13,"testChar":"c"}}
几个需要注意的地方:
-此处是属性中包含了属性-