iOS Model转JsonString,Model属性中着有Model Array,Model Array中又嵌套着自定义Model

利用MJExtension框架将Model转化为JsonString时

第一步:将Model转化为JsonObject,也就是字典,必须是系统自带的类NSString、NSNumber、NSDictionary、NSArray、NSNull的对象,转化之后不能包含任何的自定义model,否则会报错;

crash在
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error];

错误信息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (HDSanitationInstallPositionModel)'

原因:model不能直接转成json
能够转换为json字符串的对象必须具有如下属性:
顶层对象必须是NSArray或者NSDictionary
所有的对象必须是NSString/NSNumber/NSArray/NSDictionary/NSNull的实例, 所有NSDictionary的key必须是NSString类型, 数字对象不能是非数值或无穷.

当前顶层model的属性结构是这样的:

排查发现HDSanitationInstallPositionModel这个类的属性里面有个自定义的superModel,可以在model--->字典的过程中忽略此属性:

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class HDMeasureInfoModel,HDSanitationInstallInfoModel;

@interface HDSanitationInstallPositionModel : NSObject <NSCoding>

@property (nonatomic,copy) NSString * name;
/** HDMeasureInfoModel数组 */
@property (nonatomic,strong) id deviceInstallImage;
@property (nonatomic,strong) HDSanitationInstallInfoModel * superModel;
@property (nonatomic,assign,getter=isSaved) BOOL saved;
@property (nonatomic,assign) NSInteger index;
@property (nonatomic,assign) BOOL isShow;

@end

NS_ASSUME_NONNULL_END

可以利用MJExtension框架自带的协议在model--->字典过程中忽略它:

#import "HDSanitationInstallPositionModel.h"

@implementation HDSanitationInstallPositionModel

+ (NSDictionary *)mj_objectClassInArray{
    return @{@"deviceInstallImage":@"HDMeasureInfoModel"};
}

+ (NSArray *)mj_ignoredPropertyNames{
    return @[@"superModel"];
}

第二步:将第一步转化后的JsonObject转化为JsonString.

[[param.carRecord mj_JSONObject] mj_JSONString];

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值