将JSON数组转换为模型时遇到一个问题。我正在使用JSONModel
库。
@protocol PTTemplateModel <NSObject>
@end
@protocol PTProfileTemplateModel <PTTemplateModel>
@end
@protocol PTCategoryTemplateModel <PTTemplateModel>
@end
@interface PTTemplateModel : JSONModel
@property (nonatomic, assign) TemplateType type;
@property (nonatomic, copy) NSString* templateID;
@end
@interface PTProfileTemplateModel : PTTemplateModel
@property (nonatomic, copy) NSString* logoURL;
@property (nonatomic, copy) NSString* title;
@end
@interface PTCategoryTemplateModel : PTTemplateModel
@property (nonatomic, strong) NSString* category;
@end
@interface PTModel : JSONModel
@property (nonatomic, copy) NSString* title;
@property (nonatomic, strong) NSArray< PTTemplateModel>* templates; // PTTemplateModel
此templates
数组可以包含PTProfileTemplateModel
和PTCategoryTemplateModel
。
JSON输入:
{"title":"Core","templates":[{"type":0,"templateID":"","logoURL":"", "title":"data"},{"type":1,"templateID":"","category":"DB"}]}
我需要的是根据type
我需要CategoryTemplate
或ProfileTemplate
。但转换后,我只获得PTTemplateModel
类型。
我知道我已将协议类型指定为PTTemplateModel
。但是如何根据给定的数据得到不同类型的模型。
我试过了:
@property (nonatomic, strong) NSArray< PTTemplateModel>* templates;
@property (nonatomic, strong) NSArray<PTProfileTemplateModel, PTCategoryTemplateModel>* templates;
@property (nonatomic, strong) NSArray< PTTemplateModel , PTProfileTemplateModel, PTCategoryTemplateModel>* templates;
它们都不起作用。
有什么建议吗?
答案 0 :(得分:1)
为什么不尝试BWJSONMatcher,它可以帮助您以非常简洁的方式处理json数据:
@interface PTModel : NSObject<BWJSONValueObject>
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSArray *templates;
@end
@interface PTTemplateModel : NSObject
@property (nonatomic, assign) TemplateType type;
@property (nonatomic, strong) NSString *templateID;
@property (nonatomic, strong) NSString *logoURL;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *category;
@end
在 PTModel 的实现中,实现在协议 BWJSONValueObject 中声明的函数 typeInProperty::
- (Class)typeInProperty:(NSString *)property {
if ([property isEqualToString:@"templates"]) {
return [PTTemplateModel class];
}
return nil;
}
然后您可以使用 BWJSONMatcher 将数据模型放在一行中:
PTModel *model = [PTModel fromJSONString:jsonString];
可以找到如何使用 BWJSONMatcher 的详细示例here。