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?