使用JSONModel序列化自定义对象

时间:2016-01-27 15:38:22

标签: ios objective-c json serialization jsonmodel

我尝试使用适用于iOS的JSONModel框架从我的自定义Object中创建一个JSON文件。我收到错误:

-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
-[JSONModel.m:1077] EXCEPTION: Invalid type in JSON write (RegisterBuyerData)

registerBuyerData.h

@interface RegisterBuyerData : JSONModel


@property (nonatomic, strong) NSString              *buyerDataID;
@property (nonatomic        ) RegisterBuyerDataType  type;
@property (nonatomic, strong) NSString<Optional>              *title;
@property (nonatomic        ) BOOL                   required;
@property (nonatomic, strong) NSString              *value;
@property (nonatomic)         NSNumber<Optional>              *price;
@property (nonatomic)         NSNumber<Optional>              *availability;

@property (nonatomic, strong) NSArray<RegisterBuyerData*>              *fields;  //array of more RegisterBuyerData
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*>        *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray                                  *parentValue;
@property (nonatomic, strong) NSArray<RegisterBuyerData*>              *children; //array of more RegisterBuyerData but only for special selected value of an options field

- (BOOL) isAvailableForUser;

@end

registerBuyerData.m

@implementation RegisterBuyerData

- (BOOL) isAvailableForUser{

    return (!_availability || [_availability integerValue] > 0 );
}


+(JSONKeyMapper*)keyMapper
{
    return [[JSONKeyMapper alloc] initWithDictionary:@{@"id": @"buyerDataID",@"value": @"value"}];
}

@end

RegisterBuyerDataOption.h

@interface RegisterBuyerDataOption : JSONModel

@property (nonatomic, strong) NSString *key;
@property (nonatomic, strong) NSString *value;
@property (nonatomic, strong) NSNumber *price;
@property (nonatomic, strong) NSNumber *availability;

- (BOOL) isAvailableForUser;

@end

是否无法递归创建JSON字符串?当我调用toJSONString方法时,我得到了这些错误。

1 个答案:

答案 0 :(得分:3)

@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields;

应该是

@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields;

因此,请删除额外的*并重试。

编辑:

哦,我明白了。看起来您还没有声明要作为协议级联的类型。以下是

RegisterBuyerDataOption.h

@protocol RegisterBuyerDataOption @end;

@interface RegisterBuyerDataOption : JSONModel

@property (nonatomic, strong) NSString *key;
@property (nonatomic, strong) NSString *value;
@property (nonatomic, strong) NSNumber *price;
@property (nonatomic, strong) NSNumber *availability;

- (BOOL) isAvailableForUser;

@end

registerBuyerData.h

@protocol RegisterBuyerData @end;

@interface RegisterBuyerData : JSONModel


@property (nonatomic, strong) NSString              *buyerDataID;
@property (nonatomic        ) RegisterBuyerDataType  type;
@property (nonatomic, strong) NSString<Optional>              *title;
@property (nonatomic        ) BOOL                   required;
@property (nonatomic, strong) NSString              *value;
@property (nonatomic)         NSNumber<Optional>              *price;
@property (nonatomic)         NSNumber<Optional>              *availability;

@property (nonatomic, strong) NSArray<RegisterBuyerData*>              *fields;  //array of more RegisterBuyerData
@property (nonatomic, strong) NSArray<RegisterBuyerDataOption*>        *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray                                  *parentValue;
@property (nonatomic, strong) NSArray<RegisterBuyerData*>              *children; //array of more RegisterBuyerData but only for special selected value of an options field

- (BOOL) isAvailableForUser;

@end