ios - 使用 JSONModel 序列化自定义对象
<p><p>我尝试使用适用于 iOS 的 JSONModel 框架从我的自定义对象中创建一个 JSON 文件。我得到错误:</p>
<pre><code>- EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
- EXCEPTION: Invalid type in JSON write (RegisterBuyerDataOption)
- EXCEPTION: Invalid type in JSON write (RegisterBuyerData)
</code></pre>
<p>registerBuyerData.h</p>
<pre><code>@interface RegisterBuyerData : JSONModel
@property (nonatomic, strong) NSString *buyerDataID;
@property (nonatomic ) RegisterBuyerDataTypetype;
@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
</code></pre>
<p>registerBuyerData.m</p>
<pre><code>@implementation RegisterBuyerData
- (BOOL) isAvailableForUser{
return (!_availability || > 0 );
}
+(JSONKeyMapper*)keyMapper
{
return [ initWithDictionary:@{@"id": @"buyerDataID",@"value": @"value"}];
}
@end
</code></pre>
<p>RegisterBuyerDataOption.h</p>
<pre><code>@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
</code></pre>
<p>不能递归地创建 JSON 字符串吗?当我调用 toJSONString 方法时,我得到了这些错误。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><pre><code>@property (nonatomic, strong) NSArray<RegisterBuyerData*> *fields;
</code></pre>
<p>应该是</p>
<pre><code>@property (nonatomic, strong) NSArray<RegisterBuyerData> *fields;
</code></pre>
<p>所以去掉多余的<code>*</code>再试一次。</p>
<p>编辑:</p>
<p>哦,我明白了。似乎您尚未将要级联的类型声明为协议(protocol)。所以请执行以下操作</p>
<p>RegisterBuyerDataOption.h</p>
<pre><code>@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
</code></pre>
<p>registerBuyerData.h</p>
<pre><code>@protocol RegisterBuyerData @end;
@interface RegisterBuyerData : JSONModel
@property (nonatomic, strong) NSString *buyerDataID;
@property (nonatomic ) RegisterBuyerDataTypetype;
@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
</code></pre></p>
<p style="font-size: 20px;">关于ios - 使用 JSONModel 序列化自定义对象,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/35041651/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/35041651/
</a>
</p>
页:
[1]