Flutter Dart一对一模型类转换报错:_InternalLinkedHashMap无法转为UserProfileObj
问题解决:JSON嵌套对象映射到Dart模型类的类型不匹配错误
问题根源
你在UserObj.fromJson方法中,直接将json['userprofile'](本质是Map<String, dynamic>类型)赋值给了UserProfileObj?类型的userProfile变量,没有完成从Map到模型类的转换,因此触发类型不匹配错误。
修复步骤
1. 修正UserObj.fromJson方法
把直接赋值的代码替换为调用UserProfileObj.fromJson构造函数,将Map转为模型实例:
UserObj.fromJson(Map<String, dynamic> json) { userName = json['username']; firstName = json['first_name']; lastName = json['last_name']; emailAddress = json['email']; // 关键修复:将嵌套的Map转换为UserProfileObj实例 userProfile = json['userprofile'] != null ? UserProfileObj.fromJson(json['userprofile']) : null; }
2. 同步修正UserObj.toJson方法
如果需要将模型转回JSON格式,userProfile也需要调用自身的toJson方法,否则会输出对象实例而非标准JSON结构:
Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['username'] = userName; data['first_name'] = firstName; data['last_name'] = lastName; data['email'] = emailAddress; // 修复:调用UserProfileObj的toJson方法生成嵌套JSON data['userprofile'] = userProfile?.toJson(); return data; }
额外优化(可选)
可以将fromJson改为工厂构造函数,写法更简洁规范:
factory UserObj.fromJson(Map<String, dynamic> json) { return UserObj( userName: json['username'], firstName: json['first_name'], lastName: json['last_name'], emailAddress: json['email'], userProfile: json['userprofile'] != null ? UserProfileObj.fromJson(json['userprofile']) : null, ); }
同理,UserProfileObj也可以改成工厂构造函数的形式。
内容的提问来源于stack exchange,提问作者just10minutes
相关产品推荐
相关产品推荐

