Serialisieren Sie ein benutzerdefiniertes Objekt in JSON, das NSMutableArray enthält

Ich versuche mein Cart-Objekt zu serialisieren, das eine hatNSMutableArray von Elementen in ihm, aber immer ein:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Item)'

Wenn ich verstehe, wie das funktionieren soll, muss ich ein Array von Wörterbüchern erstellen, damitNSJSONSerialization richtig arbeiten. Tue ich das nicht weiter unten?

Mein Warenkorb.h:

@interface Cart : BaseObject

@property (nonatomic, strong) NSString *comp;
@property (nonatomic, strong) NSString *sono;
@property (nonatomic, strong) NSString *cust;
@property (nonatomic, strong) NSString *scus;
@property (nonatomic, strong) NSString *cnid;
@property (nonatomic, strong) NSString *dldt;
@property (nonatomic, strong) NSString *whse;
@property (nonatomic, strong) NSString *pono;
@property (nonatomic, strong) NSString *pon2;
@property (nonatomic, strong) NSString *emad;
@property (nonatomic, strong) NSString *pkin;
@property (nonatomic, strong) NSString *comt;
@property (nonatomic, strong) NSString *rtin;
@property (nonatomic, strong) NSString *lbfg;
@property (nonatomic, strong) NSString *containsOpenPriced;
@property (nonatomic, strong) NSString *totalProductAmount;
@property (nonatomic, strong) NSMutableArray *items;
@property (nonatomic) BOOL *isSubmitting;

@end

Mein Warenkorb.m:

@implementation Cart

@synthesize comp;
@synthesize sono;
@synthesize cust;
@synthesize scus;
@synthesize cnid;
@synthesize dldt;
@synthesize whse;
@synthesize pono;
@synthesize pon2;
@synthesize emad;
@synthesize pkin;
@synthesize comt;
@synthesize rtin;
@synthesize lbfg;
@synthesize containsOpenPriced;
@synthesize totalProductAmount;
@synthesize items;

- (id) initWithDictionary:(NSDictionary *)dictionary {
    self = [super init];
    if (self) {
        self.comp = dictionary[@"comp"];
        self.sono = dictionary[@"sono"];
        self.cust = dictionary[@"cust"];
        self.scus = dictionary[@"scus"];
        self.cnid = dictionary[@"cnid"];
        self.dldt = dictionary[@"dldt"];
        self.whse = dictionary[@"whse"];
        self.pono = dictionary[@"pono"];
        self.pon2 = dictionary[@"pon2"];
        self.emad = dictionary[@"emad"];
        self.pkin = dictionary[@"pkin"];
        self.comt = dictionary[@"comt"];
        self.rtin = dictionary[@"rtin"];
        self.lbfg = dictionary[@"lbfg"];
        self.containsOpenPriced = dictionary[@"containsOpenPriced"];
        self.totalProductAmount = dictionary[@"totalProductAmount"];

        NSArray *itemsArray = dictionary[@"items"];
        NSMutableArray *itemsMutableArray = [[NSMutableArray alloc]init];
        for (NSDictionary *itemDictionary in itemsArray) {
            Item *item = [[Item alloc] initWithDictionary:itemDictionary];
            [itemsMutableArray addObject:item];
        }
        self.items = itemsMutableArray;
    }

    return self;
}

@end

Mein Code zum Serialisieren meines Objekts:

NSMutableArray *itemsToSerialize = [[NSMutableArray alloc] init];
for (Item *item in cart.items) {
    NSMutableDictionary *itemDict = [[NSMutableDictionary alloc] init];
    [itemDict setObject:item forKey:@"item"];
    [itemsToSerialize addObject:item];
}

NSMutableDictionary *data = [@{
        @"comp" : cart.comp,
        @"rtin" : cart.rtin,
        @"pono" : cart.pono,
        @"pon2" : cart.pon2,
        @"totalProductAmount" : totalProductAmount,
        @"sono" : cart.sono,
        @"emad" : cart.emad,
        @"lbfg" : lbfg,
        @"pkin" : cart.pkin,
        @"containsOpenPriced" : containsOpenPriced,
        @"cnid" : cart.cnid,
        @"whse" : cart.whse,
        @"scus" : cart.scus,
        @"dldt" : cart.dldt,
        @"cust" : cart.cust,
        @"comt" : cart.comt,
        @"items": itemsToSerialize
} mutableCopy];

NSString *command = @"shoppingCart.update";
NSMutableDictionary *request = [@{
        @"command" : command,
        @"comp" : cart.comp,
        @"cnid" : sessionController.operator.cnid,
        @"cust" : cart.cust,
        @"data" : data
} mutableCopy];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:request options:kNilOptions error:nil];

Dies stirbt an den oben genanntenNSJSONSerialization Linie. Was vermisse ich?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage