Serialization 是否可以扩展类并仍然使用DSON生成器进行Dart?

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生成器中使用类继承 例如

我有使用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对其进行了测试,并按预期工作