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

调用getAssesment()时_InternalLinkedHashMap无法转为AssesmentModel?如何解决

问题根因

json.decode()返回的结果是_InternalLinkedHashMap<String, dynamic>类型的键值对集合,你没有对这个原始解析结果做模型转换,就直接赋值给了声明为AssesmentModel?类型的_assesment属性,Dart的强类型校验不通过,直接抛出类型不匹配异常。

修复代码

修改AssesmentProvider中getAssesment()方法的赋值逻辑,调用你已经实现的AssesmentModel.fromJson序列化构造方法完成类型转换即可:

Future<void> getAssesment() async {
  try {
    // AssesmentModel assesment = await AssesmentService().readJson();
    var response = await rootBundle.loadString('assets/json/assesment.json');
    print('the response: ' + response);

    var data = json.decode(response);
    print('assesment in provider');
    print(data);

    // 新增模型转换逻辑
    _assesment = AssesmentModel.fromJson(data);
  } catch (e) {
    print(e);
  }
}

可选优化点

如果要提升代码鲁棒性,可以给模型类的序列化方法增加缺省值处理,避免JSON字段缺失时报错:

// AssesmentModel的fromJson优化版
AssesmentModel.fromJson(Map<String, dynamic> json) {
  id = int.tryParse(json['id']?.toString() ?? '0') ?? 0;
  observerName = json['observerName'] ?? '';
  unit = json['unit'] ?? '';
  area = AreaModel.fromJson(json['area'] ?? {});
}

// AreaModel的fromJson优化版
AreaModel.fromJson(Map<String, dynamic> json) {
  id = int.tryParse(json['id']?.toString() ?? '0') ?? 0;
  name = json['name'] ?? '';
}

内容的提问来源于stack exchange,提问作者streetCoder3127917

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:36:04