Merge pull request #262 from eikemeier/master
Use SBJsonParser/SBJsonWriter instead of NSObject+SBJson
This commit is contained in:
commit
3484605935
1 changed files with 23 additions and 16 deletions
|
|
@ -26,9 +26,11 @@ NSData * AFJSONEncode(id object, NSError **error) {
|
||||||
NSData *data = nil;
|
NSData *data = nil;
|
||||||
|
|
||||||
SEL _JSONKitSelector = NSSelectorFromString(@"JSONDataWithOptions:error:");
|
SEL _JSONKitSelector = NSSelectorFromString(@"JSONDataWithOptions:error:");
|
||||||
SEL _SBJSONSelector = NSSelectorFromString(@"JSONRepresentation");
|
|
||||||
SEL _YAJLSelector = NSSelectorFromString(@"yajl_JSONString");
|
SEL _YAJLSelector = NSSelectorFromString(@"yajl_JSONString");
|
||||||
|
|
||||||
|
id _SBJsonWriterClass = NSClassFromString(@"SBJsonWriter");
|
||||||
|
SEL _SBJsonWriterSelector = NSSelectorFromString(@"dataWithObject:");
|
||||||
|
|
||||||
id _NXJsonSerializerClass = NSClassFromString(@"NXJsonSerializer");
|
id _NXJsonSerializerClass = NSClassFromString(@"NXJsonSerializer");
|
||||||
SEL _NXJsonSerializerSelector = NSSelectorFromString(@"serialize:");
|
SEL _NXJsonSerializerSelector = NSSelectorFromString(@"serialize:");
|
||||||
|
|
||||||
|
|
@ -54,16 +56,17 @@ NSData * AFJSONEncode(id object, NSError **error) {
|
||||||
|
|
||||||
[invocation invoke];
|
[invocation invoke];
|
||||||
[invocation getReturnValue:&data];
|
[invocation getReturnValue:&data];
|
||||||
} else if (_SBJSONSelector && [object respondsToSelector:_SBJSONSelector]) {
|
} else if (_SBJsonWriterClass && [_SBJsonWriterClass instancesRespondToSelector:_SBJsonWriterSelector]) {
|
||||||
NSString *JSONString = nil;
|
id writer = [[_SBJsonWriterClass alloc] init];
|
||||||
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[object methodSignatureForSelector:_SBJSONSelector]];
|
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[writer methodSignatureForSelector:_SBJsonWriterSelector]];
|
||||||
invocation.target = object;
|
invocation.target = writer;
|
||||||
invocation.selector = _SBJSONSelector;
|
invocation.selector = _SBJsonWriterSelector;
|
||||||
|
|
||||||
|
[invocation setArgument:&object atIndex:2]; // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
|
||||||
|
|
||||||
[invocation invoke];
|
[invocation invoke];
|
||||||
[invocation getReturnValue:&JSONString];
|
[invocation getReturnValue:&data];
|
||||||
|
[writer release];
|
||||||
data = [JSONString dataUsingEncoding:NSUTF8StringEncoding];
|
|
||||||
} else if (_YAJLSelector && [object respondsToSelector:_YAJLSelector]) {
|
} else if (_YAJLSelector && [object respondsToSelector:_YAJLSelector]) {
|
||||||
@try {
|
@try {
|
||||||
NSString *JSONString = nil;
|
NSString *JSONString = nil;
|
||||||
|
|
@ -119,9 +122,11 @@ id AFJSONDecode(NSData *data, NSError **error) {
|
||||||
id JSON = nil;
|
id JSON = nil;
|
||||||
|
|
||||||
SEL _JSONKitSelector = NSSelectorFromString(@"objectFromJSONDataWithParseOptions:error:");
|
SEL _JSONKitSelector = NSSelectorFromString(@"objectFromJSONDataWithParseOptions:error:");
|
||||||
SEL _SBJSONSelector = NSSelectorFromString(@"JSONValue");
|
|
||||||
SEL _YAJLSelector = NSSelectorFromString(@"yajl_JSONWithOptions:error:");
|
SEL _YAJLSelector = NSSelectorFromString(@"yajl_JSONWithOptions:error:");
|
||||||
|
|
||||||
|
id _SBJSONParserClass = NSClassFromString(@"SBJsonParser");
|
||||||
|
SEL _SBJSONParserSelector = NSSelectorFromString(@"objectWithData:");
|
||||||
|
|
||||||
id _NSJSONSerializationClass = NSClassFromString(@"NSJSONSerialization");
|
id _NSJSONSerializationClass = NSClassFromString(@"NSJSONSerialization");
|
||||||
SEL _NSJSONSerializationSelector = NSSelectorFromString(@"JSONObjectWithData:options:error:");
|
SEL _NSJSONSerializationSelector = NSSelectorFromString(@"JSONObjectWithData:options:error:");
|
||||||
|
|
||||||
|
|
@ -148,15 +153,17 @@ id AFJSONDecode(NSData *data, NSError **error) {
|
||||||
|
|
||||||
[invocation invoke];
|
[invocation invoke];
|
||||||
[invocation getReturnValue:&JSON];
|
[invocation getReturnValue:&JSON];
|
||||||
} else if (_SBJSONSelector && [NSString instancesRespondToSelector:_SBJSONSelector]) {
|
} else if (_SBJSONParserClass && [_SBJSONParserClass instancesRespondToSelector:_SBJSONParserSelector]) {
|
||||||
// Create a string representation of JSON, to use SBJSON -`JSONValue` category method
|
id parser = [[_SBJSONParserClass alloc] init];
|
||||||
NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
|
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[parser methodSignatureForSelector:_SBJSONParserSelector]];
|
||||||
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[string methodSignatureForSelector:_SBJSONSelector]];
|
invocation.target = parser;
|
||||||
invocation.target = string;
|
invocation.selector = _SBJSONParserSelector;
|
||||||
invocation.selector = _SBJSONSelector;
|
|
||||||
|
[invocation setArgument:&data atIndex:2]; // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
|
||||||
|
|
||||||
[invocation invoke];
|
[invocation invoke];
|
||||||
[invocation getReturnValue:&JSON];
|
[invocation getReturnValue:&JSON];
|
||||||
|
[parser release];
|
||||||
} else if (_YAJLSelector && [data respondsToSelector:_YAJLSelector]) {
|
} else if (_YAJLSelector && [data respondsToSelector:_YAJLSelector]) {
|
||||||
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[data methodSignatureForSelector:_YAJLSelector]];
|
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[data methodSignatureForSelector:_YAJLSelector]];
|
||||||
invocation.target = data;
|
invocation.target = data;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue