菜鸟教程小白 发表于 2022-12-12 10:16:51

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&lt;Optional&gt;            *title;
@property (nonatomic      ) BOOL                   required;
@property (nonatomic, strong) NSString            *value;
@property (nonatomic)         NSNumber&lt;Optional&gt;            *price;
@property (nonatomic)         NSNumber&lt;Optional&gt;            *availability;

@property (nonatomic, strong) NSArray&lt;RegisterBuyerData*&gt;            *fields;//array of more RegisterBuyerData
@property (nonatomic, strong) NSArray&lt;RegisterBuyerDataOption*&gt;      *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray                                  *parentValue;
@property (nonatomic, strong) NSArray&lt;RegisterBuyerData*&gt;            *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 || &gt; 0 );
}


+(JSONKeyMapper*)keyMapper
{
    return [ initWithDictionary:@{@&#34;id&#34;: @&#34;buyerDataID&#34;,@&#34;value&#34;: @&#34;value&#34;}];
}

@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&lt;RegisterBuyerData*&gt; *fields;
</code></pre>

<p>应该是</p>

<pre><code>@property (nonatomic, strong) NSArray&lt;RegisterBuyerData&gt; *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&lt;Optional&gt;            *title;
@property (nonatomic      ) BOOL                   required;
@property (nonatomic, strong) NSString            *value;
@property (nonatomic)         NSNumber&lt;Optional&gt;            *price;
@property (nonatomic)         NSNumber&lt;Optional&gt;            *availability;

@property (nonatomic, strong) NSArray&lt;RegisterBuyerData*&gt;            *fields;//array of more RegisterBuyerData
@property (nonatomic, strong) NSArray&lt;RegisterBuyerDataOption*&gt;      *options; //key,value array for dropDown

@property (nonatomic, strong) NSArray                                  *parentValue;
@property (nonatomic, strong) NSArray&lt;RegisterBuyerData*&gt;            *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]
查看完整版本: ios - 使用 JSONModel 序列化自定义对象