代码之家  ›  专栏  ›  技术社区  ›  user6631314

ios/objective-c:将自定义对象的nsarray转换为json

  •  1
  • user6631314  · 技术社区  · 6 年前

    基于 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的方法吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gereon    6 年前

    就像你说的, 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];