使用 json_serializable 方式
json_serializable是目前项目中最常用实现json序列化与反序列化的方法,主要的步骤是
在pubspec.yaml
中添加依赖:
environment:
sdk: ^3.5.4
dependencies:
flutter:
sdk: flutter
# json注解
json_annotation: ^4.9.0
dev_dependencies:
flutter_test:
sdk: flutter
# json序列化
json_serializable: ^6.8.0
# 代码生成
build_runner: ^2.4.13
创建实体类:
part 'user.g.dart';
@JsonSerializable()
class User {
String? name;
int? age;
User({this.name, this.age});
factory User.fromJson(Map<String, dynamic> json) {
return _$UserFromJson(json);
}
Map<String, dynamic> toJson() {
return _$UserToJson(this);
}
}
手动添加fromJson
和toJson
方法
自动生成.g文件:
在终端中执行flutter packages pub run build_runner build --delete-conflicting-outputs
在当前目录会自动生成user.g.dart
文件
使用:
User user = User.fromJson({"name": "张三", "age": 18});
Map<String, dynamic> json= user.toJson();
总结:
优点:
自动生成,避免人为错误
缺点:
每次更新内容后都需要重新生成
实体类里面需要手动添加方法
使用 json 库方式(实验室)
除了使用json_serializable外flutter还提供了用json库通过自定义宏的方式来实现
在pubspec.yaml
中添加依赖:
dependencies:
flutter:
sdk: flutter
# json序列化
json: ^0.20.2
在analysis_options.yaml
中添加配置:
analyzer:
enable-experiment:
- macros
创建实体类:
@JsonCodable()
class User {
String? name;
int? age;
}
使用:
User user = User.fromJson({"name": "张三", "age": 18});
user.toJson();
需要使用--enable-experiment=macros
运行程序
总结:
优点:
自动生成
不需要手动添加方法
缺点:
还是实验室产品,功能还不完善