使用JSONModel序列化自定义对象 [英] Serialize a custom object with JSONModel
问题描述
我尝试使用适用于iOS的JSONModel框架从自定义对象中创建JSON文件.我收到错误消息:
I try to create a JSON file out of my custom Object with the JSONModel framework for iOS. I get the Error:
-[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
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
registerBuyerData.m
@implementation RegisterBuyerData
- (BOOL) isAvailableForUser{
return (!_availability || [_availability integerValue] > 0 );
}
+(JSONKeyMapper*)keyMapper
{
return [[JSONKeyMapper alloc] initWithDictionary:@{@"id": @"buyerDataID",@"value": @"value"}];
}
@end
RegisterBuyerDataOption.h
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方法时,出现这些错误.
Is it not possible to create a JSON String recursively? When I call the toJSONString method I get these Errors.
推荐答案
@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields;
应该是
@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields;
因此,请删除多余的*
,然后重试.
So get rid of the extra *
and try again.
哦,我明白了.似乎您尚未将要级联的类型声明为协议.以下内容也是如此
Oh, I see. It seems like you haven't declared the types you want to cascade as protocols. So do the following
RegisterBuyerDataOption.h
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
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
这篇关于使用JSONModel序列化自定义对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!