我想序列化这个不可变的类
class CatalogueItem {
final Uri source;
final DateTime analyis;
final Period fromTo;
CatalogueItem.create(this.source, this.analyis, this.fromTo);
}
但我不能,因为这不是一个简单的类(class)。从网站https://www.dartlang.org/articles/serialization/
所以我必须添加一个默认的构造函数-这意味着我必须删除final关键字,并且我的类不再是不变的。
class CatalogueItem {
Uri source;
DateTime analyis;
Period fromTo;
CatalogueItem.create(this.source, this.analyis, this.fromTo);
CatalogueItem(){}
}
有没有办法解决这个问题?
最佳答案
我认为默认构造函数仅对于反序列化是必需的(从来不使用用于(反)序列化的包)。序列化不需要它。
默认构造函数是多余的,因为如果反序列化程序包需要默认构造函数,则它显然会尝试使用默认构造函数创建实例,然后再设置字段值,而该值不适用于最终字段。
我不知道序列化程序包是否支持自定义toJson()
方法/ fromJson()
构造函数,但我认为这是最简单的方法。
class CatalogueItem {
final Uri source;
final DateTime analysis;
final Period fromTo;
CatalogueItem.create(this.source, this.analysis, this.fromTo);
factory CatalogueItem.fromJson(Map json) {
return new CatalogueItem.create(
json['source'] == null ? null : Uri.parse(json['source']),
json['analysis'] == null ? null : DateTime.parse(json['analysis'])),
json['fromTo'] == null ? null : new Period.fromJson(json['fromTo']));
}
Map toJson() {
return {
'source': source == null ? null : '$source',
'analysis': analysis == null ? null : '$analysis',
'fromTo': fromTo == null ? null : fromTo.toJson();
}
}
关于serialization - Dart序列化不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30204276/