AFN的基本使用(序列化)

问题描述 : 使用AFN发送网络请求时, 服务器返回的响应体responseObject默认是JSON数据,并且AFN已经帮我们做好了反序列处理, 返回的responseObject实际是一个经过反序列处理的OC对象.
如果服务器返回的是JSON数据,那么AFN会帮我们做反序列处理;但如果返回的数据是XML呢 ? 或者既不是JSON ,也不是XML ,而且其他数据类型又该如何处理 ? 本文将探讨后面两种情况.

1,服务器返回XML数据

这里我使用AFN发送一个简单的GET请求来说明;
1.创建会话管理者对象

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dict = @{@"type":@"XML"};

2.实际上AFN给我们封装了一个设置序列化方法的属性

//设置AFN的序列化方法--XML
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

3.发送GET请求

[manager GET:@"http://xxx" parameters:dict progress:nil success:
^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
        
        //得到XML解析器
        NSXMLParser *parser = responseObject;
        
        //设置代理
        parser.delegate = self;
        
        //开始解析
        [parser parse];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        NSLog(@"失败---%@",error);
    }];

4.代理方法

#pragma mark NSXMLParserDelegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { 

    NSLog(@"elementName:%@--%@",elementName,attributeDict);

}

P.S : 更多关于XML数据解析,请点击--XML数据解析

2,服务器返回其他类型数据(非JSON非XML)

1.创建会话管理者对象

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

2.如果服务器返回的数据既不是JSON也不是XML

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

3.发送GET请求

[manager GET:@"http://xxx.png" parameters:nil 
progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
        
        UIImage *image = [UIImage imageWithData:responseObject];
        self.imageView.image = image;
        //注意, GET请求默认是在主线程中执行的
        NSLog(@"%@---",[NSThread currentThread]);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        NSLog(@"失败---%@",error);
    }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,083评论 19 139
  • 一、2大管理对象 1.AFHTTPRequestOperationManager * 对NSURLConnecti...
    蓝心儿的蓝色之旅阅读 1,893评论 1 2
  • 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代码使用自己封装的工具...
    红楼那一场梦阅读 3,542评论 2 3
  • 1.AFN使用技巧 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代...
    YSL一路行走阅读 1,267评论 1 3
  • 全称是AFNetworking,是对NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI...
    翻这个墙阅读 1,073评论 7 4