使用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 *title; @property (nonatomic ) BOOL required; @property (nonatomic, strong) NSString *value; @property (nonatomic) NSNumber *price; @property (nonatomic) NSNumber *availability; @property (nonatomic, strong) NSArray *fields; //array of more RegisterBuyerData @property (nonatomic, strong) NSArray *options; //key,value array for dropDown @property (nonatomic, strong) NSArray *parentValue; @property (nonatomic, strong) NSArray *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方法时,我得到了这些错误。
@property (nonatomic, strong) NSArray *fields;
应该
@property (nonatomic, strong) NSArray *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 *title; @property (nonatomic ) BOOL required; @property (nonatomic, strong) NSString *value; @property (nonatomic) NSNumber *price; @property (nonatomic) NSNumber *availability; @property (nonatomic, strong) NSArray *fields; //array of more RegisterBuyerData @property (nonatomic, strong) NSArray *options; //key,value array for dropDown @property (nonatomic, strong) NSArray *parentValue; @property (nonatomic, strong) NSArray *children; //array of more RegisterBuyerData but only for special selected value of an options field - (BOOL) isAvailableForUser; @end