diff --git a/AFNetworking/AFJSONUtilities.m b/AFNetworking/AFJSONUtilities.m index 3b6ff25..36d5fce 100644 --- a/AFNetworking/AFJSONUtilities.m +++ b/AFNetworking/AFJSONUtilities.m @@ -29,6 +29,9 @@ NSData * AFJSONEncode(id object, NSError **error) { SEL _SBJSONSelector = NSSelectorFromString(@"JSONRepresentation"); SEL _YAJLSelector = NSSelectorFromString(@"yajl_JSONString"); + id _NXJsonSerializerClass = NSClassFromString(@"NXJsonSerializer"); + SEL _NXJsonSerializerSelector = NSSelectorFromString(@"serialize:"); + id _NSJSONSerializationClass = NSClassFromString(@"NSJSONSerialization"); SEL _NSJSONSerializationSelector = NSSelectorFromString(@"dataWithJSONObject:options:error:"); @@ -74,6 +77,17 @@ NSData * AFJSONEncode(id object, NSError **error) { @catch (NSException *exception) { *error = [[[NSError alloc] initWithDomain:NSStringFromClass([exception class]) code:0 userInfo:[exception userInfo]] autorelease]; } + } else if (_NXJsonSerializerClass && [_NXJsonSerializerClass respondsToSelector:_NXJsonSerializerSelector]) { + NSString *JSONString = nil; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_NXJsonSerializerClass methodSignatureForSelector:_NXJsonSerializerSelector]]; + invocation.target = _NXJsonSerializerClass; + invocation.selector = _NXJsonSerializerSelector; + + [invocation setArgument:&object atIndex:2]; // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation + + [invocation invoke]; + [invocation getReturnValue:&JSONString]; + data = [JSONString dataUsingEncoding:NSUTF8StringEncoding]; } else if (_NSJSONSerializationClass && [_NSJSONSerializationClass respondsToSelector:_NSJSONSerializationSelector]) { #ifdef _AFNETWORKING_PREFER_NSJSONSERIALIZATION_ _af_nsjson_encode: @@ -106,6 +120,9 @@ id AFJSONDecode(NSData *data, NSError **error) { id _NSJSONSerializationClass = NSClassFromString(@"NSJSONSerialization"); SEL _NSJSONSerializationSelector = NSSelectorFromString(@"JSONObjectWithData:options:error:"); + + id _NXJsonParserClass = NSClassFromString(@"NXJsonParser"); + SEL _NXJsonParserSelector = NSSelectorFromString(@"parseData:error:ignoreNulls:"); #ifdef _AFNETWORKING_PREFER_NSJSONSERIALIZATION_ @@ -143,6 +160,18 @@ id AFJSONDecode(NSData *data, NSError **error) { [invocation setArgument:&yajlParserOptions atIndex:2]; // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation [invocation setArgument:error atIndex:3]; + [invocation invoke]; + [invocation getReturnValue:&JSON]; + } else if (_NXJsonParserClass && [_NXJsonParserClass respondsToSelector:_NXJsonParserSelector]) { + NSNumber *nullOption = [NSNumber numberWithBool:YES]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[_NXJsonParserClass methodSignatureForSelector:_NXJsonParserSelector]]; + invocation.target = _NXJsonParserClass; + invocation.selector = _NXJsonParserSelector; + + [invocation setArgument:&data atIndex:2]; // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation + [invocation setArgument:error atIndex:3]; + [invocation setArgument:&nullOption atIndex:4]; + [invocation invoke]; [invocation getReturnValue:&JSON]; } else if (_NSJSONSerializationClass && [_NSJSONSerializationClass respondsToSelector:_NSJSONSerializationSelector]) { diff --git a/iOS Example/AFNetworking iOS Example.xcodeproj/project.pbxproj b/iOS Example/AFNetworking iOS Example.xcodeproj/project.pbxproj index 2d70a05..d20f297 100644 --- a/iOS Example/AFNetworking iOS Example.xcodeproj/project.pbxproj +++ b/iOS Example/AFNetworking iOS Example.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3ACFD84015037DAB00FF5F0F /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D25D111396A9C400CF3BD6 /* JSONKit.m */; }; F8689A9914CC9F5E0087F357 /* AFJSONUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = F8689A9814CC9F5E0087F357 /* AFJSONUtilities.m */; }; F86E5529143A28F3002B438C /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F86E5528143A28F3002B438C /* AFURLConnectionOperation.m */; }; F874B5D913E0AA6500B28E3E /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F874B5C913E0AA6500B28E3E /* AFHTTPRequestOperation.m */; }; @@ -22,7 +23,6 @@ F8DA09D41396ABED0057D0CC /* NearbySpotsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09C81396AB690057D0CC /* NearbySpotsViewController.m */; }; F8DA09D51396ABED0057D0CC /* Spot.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09CB1396AB690057D0CC /* Spot.m */; }; F8DA09D61396ABED0057D0CC /* SpotTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09CE1396AB690057D0CC /* SpotTableViewCell.m */; }; - F8DA09E11396ABED0057D0CC /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D25D111396A9C400CF3BD6 /* JSONKit.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer"; }; }; F8DA09E21396ABED0057D0CC /* TTTLocationFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D25D141396A9C400CF3BD6 /* TTTLocationFormatter.m */; }; F8DA09E41396AC040057D0CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09E31396AC040057D0CC /* main.m */; }; F8DA09E81396AC220057D0CC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DA09E71396AC220057D0CC /* AppDelegate.m */; }; @@ -362,7 +362,7 @@ F8F4B16E143CD1420064C9E6 /* AFPropertyListRequestOperation.m in Sources */, F8F4B17F143E07030064C9E6 /* AFXMLRequestOperation.m in Sources */, F8689A9914CC9F5E0087F357 /* AFJSONUtilities.m in Sources */, - F8DA09E11396ABED0057D0CC /* JSONKit.m in Sources */, + 3ACFD84015037DAB00FF5F0F /* JSONKit.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };