我正在使用 Dart 和 json_serialized 包来管理我的模型的 JSON 序列化,并且遇到了有关继承的问题。
我有以下基本模型:
@JsonSerializable()
class BaseLeadModel {
final String? name;
final String? email;
final String? contactNo;
BaseLeadModel({this.name, this.email, this.contactNo});
factory BaseLeadModel.fromJson(Map<String, dynamic> json) => _$BaseLeadModelFromJson(json);
Map<String, dynamic> toJson() => _$BaseLeadModelToJson(this);
}
我有一个扩展 BaseLeadModel 的派生模型:
@JsonSerializable()
class AddLeadModel extends BaseLeadModel {
final String? leadStatusId;
final CreateLeadEnquiryModel? enquiry;
AddLeadModel({
this.leadStatusId,
this.enquiry,
}) : super();
factory AddLeadModel.fromJson(Map<String, dynamic> json) => _$AddLeadModelFromJson(json);
@override
Map<String, dynamic> toJson() => _$AddLeadModelToJson(this);
}
当我使用 flutter pub run build_runner build 生成序列化代码时,为 AddLeadModel 生成的 fromJson 和 toJson 方法不包含 BaseLeadModel 中的字段。这会导致基类字段未正确序列化或反序列化的问题。
如何确保 BaseLeadModel 中的字段包含在 AddLeadModel 类的序列化和反序列化过程中?
我尝试过以下方法
AddLeadModel({ String? name, String? email, String? contactNo, this.leadStatusId, this.enquiry, }) : super(name: name, email: email, contactNo: contactNo);
但是我的基础模型可能有更多的属性,我不想再次重复并在我的基础模型中添加相同的属性。
虽然你可以写
AddLeadModel({
String? name,
String? email,
String? contactNo,
this.leadStatusId,
this.enquiry,}) : super(
name: name,
email: email,
contactNo: contactNo);
你可以通过写这个来缩短它
AddLeadModel({
super.name,
super.email,
super.contactNo,
this.leadStatusId,
this.enquiry,});
据我所知,没有办法省略 super 的参数。