ios – 将自定义对象序列化为包含NSMutableArray的JSON

前端之家收集整理的这篇文章主要介绍了ios – 将自定义对象序列化为包含NSMutableArray的JSON前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试序列化我的Cart对象,其中包含一个NSMutableArray项目,但得到一个:

***由于未捕获的异常’NSInvalidArgumentException’而终止应用程序,原因:’JSON写入(Item)中的类型无效’

如果我理解这应该如何工作,我需要创建一个字典数组,以便NSJSONSerialization正常工作.那不是我在下面做的吗?

我的Cart.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

我的购物车:

@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

我的序列化对象的代码

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,@"data" : data
} mutableCopy];

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

这死在上面的NSJSONSerialization线上.我错过了什么?

解决方法

这一行:[itemsToSerialize addObject:item];应该是[itemsToSerialize addObject:itemDict] ;.结果是你试图序列化一个项目本身的数组,这给你看到的例外.

猜你在找的iOS相关文章