使用JSONModel序列化自定义对象 [英] Serialize a custom object with JSONModel

查看:140
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆