一、配置依赖
- 在pubspec.yaml中添加必要的依赖:
dependencies:
flutter:
sdk: flutter
json_annotation: ^4.8.1 # 提供必要的注解
dev_dependencies:
build_runner: ^2.4.6 # 代码生成工具
json_serializable: ^6.7.1 # 序列化代码生成器
- 配置完依赖后,执行
flutter pub get
二、 使用
- 定义一个模型类
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable() // 表示这个类需要生成序列化代码
class User {
final String name;
final String name;
final int age;
User({
required this.name,
required this.email
});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this)
}
代码解释如下:
@JsonSerializable()注解告诉生成器需要为这个类生成序列化代码
user.g.dart文件是自动生成的
需要实现序列化与反序列化函数
- 在根目录,执行
flutter pub run build_runner build
这个命令会:
扫描项目中所有被@JsonSerializable()注解的类
为每个类生成对应的xxx.g.dart文件
还会生成序列化和反序列化实现
三、 一些使用配置
3.1 @JsonKey 的简单使用
@JsonKey(name: 'user_name') // 自定义JSON字段名
final String name;
@JsonKey(ignore: true) // 忽略此字段,不参与序列化
final int age;
@JsonKey(defaultValue: 'unknown') // 默认值
final String statuc;
@JsonKey(includeIfNull: false) // 为null时不包含在JSON中
final String token;
@JsonKey(fromJson: _parseBalance, toJson: _stringifyBalance) // 自定义转换
final double balance;
static double _parseBalance(String json) => double.parse(json);
static String _stringifyBalance(double balance) => balance.toStringAsFixed(2);
3.2 @JsonKey 枚举的支持
enum UserType {
@JsonValue('admin')
admin,
@JsonValue('editor')
editor,
@JsonValue('viewer')
viewer,
@JsonValue('guest')
guest
}