gpt4 book ai didi

serialization - Dart 序列化不可变对象(immutable对象)

转载 作者:行者123 更新时间:2023-12-03 03:27:24 25 4
gpt4 key购买 nike

我想序列化这个不可变的类

class CatalogueItem {
final Uri source;
final DateTime analyis;
final Period fromTo;

CatalogueItem.create(this.source, this.analyis, this.fromTo);
}

但我不能,因为它不是一个简单的类。来自网站 https://www.dartlang.org/articles/serialization/

Simple: All of the objects to be serialized are data transfer objects (DTOs) with a default constructor.



所以我必须添加一个默认构造函数——这意味着我必须删除 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com