JSONModel 忽略一些字段

这里要说的重点不是在与JsonModel 本身有的方法的常规写法,而是如何全局忽略无关属性.(每个Model 都写一下下面的方法,岂不是很蛋(^))

方式一.可选属性 (就是说这个属性可以为null或者为空)

{
  "id": "123",
  "name": null,
  "price": 12.95
}
@interface ProductModel : JSONModel
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Optional>* name;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSNumber<Optional>* uuid;
@end

@implementation ProductModel
@end

方式二.忽略属性 (就是完全忽略这个属性)

{
  "id": "123",
  "name": null
}
@interface ProductModel : JSONModel
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Ignore>* customProperty;
@end

@implementation ProductModel
@end

方式三.设置所有的属性为可选(所有属性值可以为空)

@implementation ProductModel
+(BOOL)propertyIsOptional:(NSString*)propertyName
{
  return YES;
}
@end

重点在这里 propertyIsOptional方法默认返回的是NO;拦截该方法,使其返回YES.(当然,如果你修改JsonModel 源码,当我没说)

#import "objc/runtime.h"
@implementation  JSONModel (SafeJSONModel)

+(void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL org_Selector = @selector(propertyIsOptional:);
        SEL dt_Selector  = @selector(dt_propertyIsOptional:);
        
        Method org_method = class_getClassMethod([self class], org_Selector);
        Method dt_method  = class_getClassMethod([self class], dt_Selector);
        
        class_addMethod(self, org_Selector, method_getImplementation(dt_method), method_getTypeEncoding(dt_method));
//        if (isAdd) {
//            class_replaceMethod(self, dt_Selector, method_getImplementation(org_method), method_getTypeEncoding(org_method));
//        }else{
            method_exchangeImplementations(org_method, dt_method);
//        }
        
    });
}
+(BOOL)dt_propertyIsOptional:(NSString *)propertyName{
    [self dt_propertyIsOptional:propertyName];
    return YES;
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,613评论 25 709
  • 最近看了素黑的 自爱无需等待,觉得以前那些浅薄的爱,无知的爱,好像也曾在自己身上出现过,只是那时候还不知道什么是自...
    公子逸诚阅读 279评论 0 2
  • 【01】那样的眉眼,似乎见过千遍万遍。 今日孟婆送了我一段摄魂香。 她说许久不曾收集到这般纯正的香了,若只是...
    竹原阅读 759评论 1 1
  • -01 MAF180慢跑- 距离:10km时间:01:04:38平均配速:06'27" 最快配速:06'22" ...
    崔宏雷阅读 559评论 0 50