You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:46:04