我尝试使用适用于 iOS 的 JSONModel 框架从我的自定义对象中创建一个 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 方法时,我得到了这些错误。
Best Answer-推荐答案 strong>
@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields;
应该是
@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields;
所以去掉多余的* 再试一次。
编辑:
哦,我明白了。似乎您尚未将要级联的类型声明为协议(protocol)。所以请执行以下操作
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
关于ios - 使用 JSONModel 序列化自定义对象,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/35041651/
|