JSON转Dart对象失败:无法打印属性值的问题排查
排查JSON转Dart实体id属性无法读取的问题
1. 核对JSON键名与Dart类属性名的一致性
Dart对大小写敏感,确保JSON中的id键名和Dart类里的属性名完全匹配,比如JSON里是"id": 1001,Dart类里就不能写成int Id;或者int iid;,必须保持拼写、大小写完全一致。
2. 检查fromJson方法的赋值逻辑
确认MROParent.fromJson方法里正确读取了JSON中的id值并赋值给类属性,避免漏写或键名错误:
// 错误示例:遗漏id赋值 MROParent.fromJson(Map<String, dynamic> json) { children = List<MROChild>.from(json['children'].map((x) => MROChild.fromJson(x))); } // 正确示例: MROParent.fromJson(Map<String, dynamic> json) { id = json['id']; // 确保此处键名和JSON一致 children = List<MROChild>.from(json['children'].map((x) => MROChild.fromJson(x))); }
3. 确认id属性的访问权限
如果id是私有属性(以_开头,比如int _id;),直接打印parent.id会无法访问,需要改为公共属性或添加getter方法:
// 方案1:改为公共属性 class MROParent { int id; MROParent.fromJson(Map<String, dynamic> json) { id = json['id']; } } // 方案2:私有属性加getter class MROParent { int _id; int get id => _id; MROParent.fromJson(Map<String, dynamic> json) { _id = json['id']; } }
4. 验证JSON中id字段的有效性
打印原始JSON时,确认id字段确实存在且有值,避免出现字段缺失、值为null,或者id嵌套在更深层级(比如json['data']['id']而不是直接json['id'])的情况。
5. 确认转换后的对象及toString方法
转换后先打印整个MROParent对象,确认对象本身不为null,同时如果重写了toString方法,要确保包含id属性:
var parent = MROParent.fromJson(jsonData); print(parent); // 查看对象输出是否包含id print(parent.id); // 重写toString示例 @override String toString() { return 'MROParent{id: $id, children: $children}'; }
内容的提问来源于stack exchange,提问作者Kim Lo
相关产品推荐
相关产品推荐

