使用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