如何在json-serializable中序列化Dart私有字段?
如何在json-serializable中序列化私有字段?
可以通过给私有字段添加@JsonKey注解,并确保序列化生成代码与类处于同一库中来实现,无需将私有字段改为公共字段或添加公共getter。
修改后的可运行代码
import 'package:json_annotation/json_annotation.dart'; part 'a.g.dart'; @JsonSerializable() class A { @JsonKey(name: 'x') // 可选:指定序列化后的键名,若不指定则默认使用"_x" final int _x; A(int x) : _x = x; factory A.fromJson(Map<String, dynamic> json) => _$AFromJson(json); Map<String, dynamic> toJson() => _$AToJson(this); // 必须添加toJson方法以支持序列化 }
关键说明
- 库级可见性:Dart中以下划线开头的私有字段,可见范围是整个库(而非仅类内部)。json_serializable生成的
.g.dart文件与原类文件属于同一库,因此生成的_$AFromJson和_$AToJson方法可以直接访问_x字段。 - @JsonKey注解:用于指定字段在JSON中的键名,避免JSON中出现带下划线的键(当然也可以不指定,直接使用
_x作为JSON键)。 - 生成代码:执行以下命令生成序列化代码:
dart run build_runner build
内容的提问来源于stack exchange,提问作者iDecode
相关产品推荐
相关产品推荐

