【问题标题】:IOS/Objective-C: Convert NSArray of Custom Objects to JSONIOS/Objective-C:将自定义对象的 NSArray 转换为 JSON
【发布时间】:2018-12-15 21:02:26
【问题描述】:

基于the accepted answer to this answer,我正在尝试通过 JSON 将一组自定义对象发送到服务器。

但是,以下用于序列化对象的代码会崩溃。我认为是因为 NSJSONSerialization 只能接受 NSDictionary,不能接受自定义对象。

NSArray <Offers *> *offers = [self getOffers:self.customer];
//Returns a valid array of offers as far as I can tell.
NSError *error;
//Following line crashes
NSData * JSONData = [NSJSONSerialization dataWithJSONObject:offers
                                                    options:kNilOptions
                                                      error:&error];

谁能建议将自定义对象数组转换为 JSON 的方法?

【问题讨论】:

标签: ios objective-c json nsjsonserialization


【解决方案1】:

就像你说的,NSJSONSerialization 只理解字典和数组。您必须在自定义类中提供一个方法,将其属性转换为字典,如下所示:

@interface Offers 
@property NSString* title;
-(NSDictionary*) toJSON;
@end

@implementation Offers
-(NSDictionary*) toJSON {
    return @{
       @"title": self.title
    };
}
@end

然后您可以将代码更改为

NSArray <Offers *> *offers = [self getOffers:self.customer];
NSMutableArray<NSDictionary*> *jsonOffers = [NSMutableArray array];
for (Offers* offer in offers) {
    [jsonOffers addObject:[offer toJSON]];
}
NSError *error;
//Following line crashes
NSData * JSONData = [NSJSONSerialization dataWithJSONObject:jsonOffers
                                                    options:kNilOptions
                                                      error:&error];

【讨论】:

  • 嗨,我发现自定义类 (NSManagedObject) 中的 toJSON 方法返回空值。如果 offer 中的属性是 @property (nonatomic, retain) NSString * title;通过 [offer toJSON] 获取标题的正确代码是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2011-11-27
  • 2021-07-02
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多