AFNetworking3.1.0源码分析(十二)AFURLResponseSerialization
来源:互联网 发布:网络直播间装修效果图 编辑:程序博客网 时间:2024/05/16 18:44
一:AFURLResponseSerialization 和 AFURLRequestSerialization 是一对出现在网络处理中,AFURLResponseSerialization主要负责对网络请求完成之后返回的结果做解析处理。
分析AFURLResponseSerialization.h 可得到,相关类的结构如下图所示:
二:提供json解析是去除空值功能:
static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { if ([JSONObject isKindOfClass:[NSArray class]]) { NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; for (id value in (NSArray *)JSONObject) { [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; } return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; for (id <NSCopying> key in [(NSDictionary *)JSONObject allKeys]) { id value = (NSDictionary *)JSONObject[key]; if (!value || [value isEqual:[NSNull null]]) { [mutableDictionary removeObjectForKey:key]; } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); } } return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; } return JSONObject;}其中的:NSJSONReadingOptions含义如下:
/* NSJSONReadingMutableContainers:返回可变容器 NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串 */二:
AFCompoundResponseSerializer 是个符合类型的,可以设置多种解析方式处理方式如下代码:
+ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { //设置可以接收的解析类型对象 AFCompoundResponseSerializer *serializer = [[self alloc] init]; serializer.responseSerializers = responseSerializers; return serializer;}#pragma mark - AFURLResponseSerialization- (id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError *__autoreleasing *)error{ //循环解析,遇见可以解析的类解析数据,如果解析数据为空,继续执行其它的解析方式 for (id <AFURLResponseSerialization> serializer in self.responseSerializers) { if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { continue; } NSError *serializerError = nil; id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; if (responseObject) { if (error) { *error = AFErrorWithUnderlyingError(serializerError, *error); } return responseObject; } } return [super responseObjectForResponse:response data:data error:error];}
0 0
- AFNetworking3.1.0源码分析(十二)AFURLResponseSerialization
- AFNetworking3.1.0源码分析(十)之AFSecurityPolicy
- AFNetworking3.1.0源码分析(十四)AFHTTPSessionManager
- AFNetworking3.1.0源码分析(十三)AFURLSessionManager
- AFNetworking3.1.0源码分析(一)整体框架和功能模块
- AFNetworking3.1.0源码分析(三)AFHTTPRequestSerializer 之AFQueryStringPair
- AFNetworking3.1.0源码分析(八)AFHTTPRequestSerializer 之AFStreamingMultipartFormData下
- AFNetworking3.1.0源码分析(十一)之AFSecurityPolicy验证服务器信任
- AFNetworking2.0源码解析AFURLResponseSerialization
- AFNetworking3.1.0源码分析(四)详解AFHTTPRequestSerializer 之初始化方法
- AFNetworking3.1.0源码分析(五)详解AFHTTPRequestSerializer 之创建NSMutableURLRequest
- AFNetworking3.1.0源码分析(六)详解AFHTTPRequestSerializer 之序列化NSMutableURLRequest
- AFNetworking3.1.0源码分析(七)详解AFHTTPRequestSerializer 之AFStreamingMultipartFormData上
- AFNetworking3.1.0源码分析(九)AFHTTPRequestSerializer 之解决调用Amazon S3 服务出现的bug
- AFNetwork 3.0 源码解读(四)AFURLResponseSerialization
- AFNetworking源码 - Multipart协议,AFURLRequestSerialization和AFURLResponseSerialization
- Elasticsearch源码分析十二--过滤器
- Minetest源码分析十二:ServerMap
- 143. Reorder List
- 第四课--C++之vector
- C语言基础(3)
- jquery源码学习笔记三:jQuery工厂剖析
- OpenWrt安装MentoHUST之后导致路由开机电源闪烁的原因及其解决方法
- AFNetworking3.1.0源码分析(十二)AFURLResponseSerialization
- 版本管理
- 开源 Caffe、TensorFlow、MXnet三个开源库对比
- PAT BASIC LEVEL 1020. 月饼 (25)
- Memcached常用命令及使用说明
- 设计模式-单例模式
- swift3中的多线程GCD
- 顺序表应用2:多余元素删除之建表算法
- 使用工厂方法模式创建实例(JAVA版)