Flutter JSON序列化与不可变集合插件json_serializable_immutable_collections的使用
Flutter JSON序列化与不可变集合插件json_serializable_immutable_collections的使用
json_serializable_immutable_collections
(json_serializable_immutable_collections) 是一个扩展 json_serializable 功能的非官方插件,支持更多类型的集合序列化。
特性:
- 行为类似于 json_serializable。
- 支持以下更多集合类型:
- 所有 json_serializable 支持的类型。
- BuiltList。
- BuiltSet。
- BuiltMap。
- KtList。
- KtSet。
- KtMap。
如果您希望支持更多类型,请随时提交问题或拉取请求。
如何使用
1. 添加依赖
在 pubspec.yaml
的 dev_dependencies
中添加:
json_serializable_immutable_collections: <current_version>
2. 配置 build.yaml
创建或修改 build.yaml
文件(必要时避免与 json_serializable 冲突):
targets:
$default:
builders:
json_serializable_immutable_collections:
# 配置选项,与 json_serializable 类似
options:
explicit_to_json: true
json_serializable:json_serializable:
generate_for:
# 排除所有文件以避免冲突,此库使用自定义构建器
include:
exclude:
- test/**
- lib/**
示例代码
以下是一个完整的示例,展示如何使用 json_serializable_immutable_collections
对不可变集合进行序列化和反序列化。
main.dart
import 'package:json_annotation/json_annotation.dart'; // 引入 json_annotation
import 'package:kt_dart/kt.dart'; // 引入 kt_dart 库
// 生成部分代码
part 'main.g.dart';
// 使用 @JsonSerializable 注解标记类
@JsonSerializable()
class Model {
// 定义一个不可变的 KtList<int>
final KtList<int> myIntList;
// 构造函数
Model({required this.myIntList});
// 从 JSON 反序列化
factory Model.fromJson(Map<String, dynamic> json) => _$ModelFromJson(json);
// 将对象序列化为 JSON
Map<String, dynamic> toJson() => _$ModelToJson(this);
}
void main() {
// 创建一个不可变列表并打印其 JSON 表示
print(
Model(myIntList: KtList.of(1, 2, 3)).toJson()
);
}
输出结果
运行上述代码后,将得到以下输出:
{"myIntList":[1,2,3]}
更多关于Flutter JSON序列化与不可变集合插件json_serializable_immutable_collections的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON序列化与不可变集合插件json_serializable_immutable_collections的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,json_serializable
是一个非常流行的库,用于自动生成 JSON 序列化和反序列化代码。而 json_serializable_immutable_collections
是一个扩展插件,专门用于处理不可变集合(如 KtList
, KtSet
, KtMap
等)的序列化和反序列化。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
json_annotation: ^4.7.0
kt_dart: ^0.11.0
dev_dependencies:
build_runner: ^2.1.7
json_serializable: ^6.3.1
json_serializable_immutable_collections: ^1.1.0
json_annotation
: 用于定义 JSON 序列化的注解。kt_dart
: 提供了不可变集合的实现。build_runner
: 用于生成代码。json_serializable
: 自动生成 JSON 序列化和反序列化代码。json_serializable_immutable_collections
: 扩展json_serializable
以支持不可变集合。
2. 创建数据模型
接下来,创建一个数据模型类,并使用 @JsonSerializable
注解标记它。使用 KtList
, KtSet
, KtMap
等不可变集合类型。
import 'package:json_annotation/json_annotation.dart';
import 'package:kt_dart/kt.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final KtList<String> hobbies;
final KtMap<String, int> scores;
User({
required this.name,
required this.hobbies,
required this.scores,
});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
3. 生成代码
运行以下命令生成序列化和反序列化代码:
flutter pub run build_runner build
这将生成 user.g.dart
文件,其中包含 User
类的 fromJson
和 toJson
方法。
4. 使用生成的代码
现在你可以使用生成的代码来序列化和反序列化 User
对象。
void main() {
final user = User(
name: 'John Doe',
hobbies: listOf('Reading', 'Swimming'),
scores: mapFrom({'Math': 90, 'Science': 85}),
);
// 序列化
final json = user.toJson();
print(json);
// 反序列化
final decodedUser = User.fromJson(json);
print(decodedUser);
}
5. 输出示例
假设你有一个 User
对象,序列化后的 JSON 可能如下:
{
"name": "John Doe",
"hobbies": ["Reading", "Swimming"],
"scores": {
"Math": 90,
"Science": 85
}
}