2016-01-27 39 views
2

我尝试使用iOS的JSONModel框架从我的自定义对象中创建JSON文件。我得到的错误:使用JSONModel序列化自定义对象

-[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方法时,我得到这些错误。

回答

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 
+0

我试过,但Xcode中不想再建:类型参数 'RegisterBuyerData' 必须是指针(需要'*') – tuvok

+0

@tuvok请参阅编辑。 –

+0

thx,这是问题所在。我添加了@protocol RegisterBuyerData @end;并在没有指针的情况下将数组类型更改为NSArray 。 – tuvok

相关问题