Serialization 是否可以扩展类并仍然使用DSON生成器进行Dart?
我有使用sdk 1.24的dart web app,并一直在使用dson:0.11.0为保存到firestore数据库的对象生成可序列化的类/模型 我喜欢dson生成的类使我能够从地图创建dart对象,或将dart对象序列化到地图以保存在firebase中的方式 话虽如此,dson生成器要求我的模型类扩展可序列化的抽象生成类 我的应用程序开始变得相当大,我正在努力解决无法使用继承和开发类层次结构的问题 除非我遗漏了一些我自己似乎无法破解的概念,否则我无法理解如何在dson生成器中使用类继承 例如,这里有一个非常简单的例子,说明我正在尝试做什么Serialization 是否可以扩展类并仍然使用DSON生成器进行Dart?,serialization,dart,linkedhashmap,dartson,Serialization,Dart,Linkedhashmap,Dartson,我有使用sdk 1.24的dart web app,并一直在使用dson:0.11.0为保存到firestore数据库的对象生成可序列化的类/模型 我喜欢dson生成的类使我能够从地图创建dart对象,或将dart对象序列化到地图以保存在firebase中的方式 话虽如此,dson生成器要求我的模型类扩展可序列化的抽象生成类 我的应用程序开始变得相当大,我正在努力解决无法使用继承和开发类层次结构的问题 除非我遗漏了一些我自己似乎无法破解的概念,否则我无法理解如何在dson生成器中使用类继承 例如
class EmploymentIncome extends Object {
String employerName;
Address employerAddress;
DateTime hireDate;
}
class SalaryIncome extends EmploymentIncome {
double annualSalary;
}
class HourlyIncome extends EmploymentIncome {
double hourlyRate;
double hoursPerWeek;
}
class hourlyPaystub extends HourlyIncome {
double yearToDateHourlyEarnings;
double hoursWorked;
DateTime payDate;
DateTime periodEndingDate;
}
class salaryPaystub extends SalaryIncome {
double yearToDateSalaryEarnings;
DateTime payDate;
DateTime periodEndingDate;
}
问题是,dson生成器需要我的模型来扩展生成的抽象类,请参见以下内容:
@serializable
class EmploymentIncome extends _$EmploymentIncomeSerializable {
class EmploymentIncome extends Object {
String employerName;
Address employerAddress;
DateTime hireDate;
}
显然,现在的问题是,我不能用另一个可序列化的dson类扩展EmploymentIncome
我是否缺少一个基本的概念或技术,使我能够扩展这些类,同时仍然保持在地图之间转换省道对象的能力
提前感谢您的指导 我不太熟悉
包:dson
,但在使用和编写了各种序列化代码生成器之后,归根结底我知道:给定输入应该创建什么类
在大多数情况下,序列化格式不包含类信息(它太冗长而无法存储),并且库无法真正决定是否需要为给定输入实例化超类或子类。我怀疑dson的情况也是如此
在大多数情况下,如果您使用组合而不是继承,您将具有更好的性能,并且可以保持未来的可靠性。查看类似问题的答案。需要做两件事:
- 使用带运算符的
扩展生成的可序列化的类
- 添加注释以忽略分析错误
例如,在您的情况下,您可以执行以下操作:
@serializable
class EmploymentIncome extends _$EmploymentIncomeSerializable {
String employerName;
Address employerAddress;
DateTime hireDate;
}
@serializable
// ignore: mixin_inherits_from_not_object
class SalaryIncome extends EmploymentIncome with _$SalaryIncomeSerializable {
double annualSalary;
}
@serializable
// ignore: mixin_inherits_from_not_object
class HourlyIncome extends EmploymentIncome with _$HourlyIncomeSerializable {
double hourlyRate;
double hoursPerWeek;
}
@serializable
// ignore: mixin_inherits_from_not_object
class HourlyPaystub extends HourlyIncome with _$HourlyPaySerializable {
double yearToDateHourlyEarnings;
double hoursWorked;
DateTime payDate;
DateTime periodEndingDate;
}
@serializable
// ignore: mixin_inherits_from_not_object
class SalaryPaystub extends SalaryIncome with _$SalaryPayStubSerializable {
double yearToDateSalaryEarnings;
DateTime payDate;
DateTime periodEndingDate;
}
非常感谢,这正是我想要的!似乎文档已经更新以解决这个问题,或者我只是在最初查看文档时不理解这一点。再次感谢你的指导,再次感谢你,这正是我想要的……生活变得更轻松了(减去我现在需要重写所有课程的事实)!事实上,我说得太快了。。。。它在编辑器中工作,但当我尝试调试时,我得到以下信息:'用作mixin的类必须将对象作为超类。抽象类u$SalaryIncomeCalcSerializable扩展了SerializableMap{^^^^^^^^`我用最新版本的dart sdk对其进行了测试,并按预期工作