使用JSONModel库将jsonarray(具有不同类型)转换为模型数组

时间:2015-10-29 06:56:39

标签: ios objective-c json jsonmodel

将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数组可以包含PTProfileTemplateModelPTCategoryTemplateModel

JSON输入:

{"title":"Core","templates":[{"type":0,"templateID":"","logoURL":"", "title":"data"},{"type":1,"templateID":"","category":"DB"}]}

我需要的是根据type我需要CategoryTemplateProfileTemplate。但转换后,我只获得PTTemplateModel类型。

我知道我已将协议类型指定为PTTemplateModel。但是如何根据给定的数据得到不同类型的模型。

我试过了:

  1. @property (nonatomic, strong) NSArray< PTTemplateModel>* templates;

  2. @property (nonatomic, strong) NSArray<PTProfileTemplateModel, PTCategoryTemplateModel>* templates;

  3. @property (nonatomic, strong) NSArray< PTTemplateModel , PTProfileTemplateModel, PTCategoryTemplateModel>* templates;

  4. 它们都不起作用。

    有什么建议吗?

1 个答案:

答案 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