Flutter如何实现序列化
在Flutter中如何实现对象的序列化和反序列化?目前项目需要将复杂对象转换为JSON进行网络传输或本地存储,尝试了手动编写toJson/fromJson方法但比较繁琐。有没有更高效的方案?比如使用json_serializable或built_value这类库时,具体应该如何配置和生成代码?能否提供一个完整的示例,包括模型类定义、注解添加以及build_runner的使用步骤?
2 回复
在Flutter中,序列化可以通过以下方式实现:
1. 手动序列化(简单场景)
class User {
final String name;
final int age;
User(this.name, this.age);
// 序列化为JSON
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
};
}
// 从JSON反序列化
factory User.fromJson(Map<String, dynamic> json) {
return User(
json['name'] as String,
json['age'] as int,
);
}
}
// 使用示例
void main() {
var user = User('张三', 25);
var json = user.toJson();
print(json); // {name: 张三, age: 25}
var newUser = User.fromJson(json);
}
2. 使用json_serializable(推荐)
步骤1:添加依赖
dependencies:
flutter:
sdk: flutter
json_annotation: ^4.8.1
dev_dependencies:
build_runner: ^2.4.4
json_serializable: ^6.7.1
步骤2:创建模型类
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
User(this.name, this.age);
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
步骤3:生成代码
flutter pub run build_runner build
3. 使用内置的json转换
import 'dart:convert';
// 序列化
String jsonString = jsonEncode(user.toJson());
// 反序列化
Map<String, dynamic> userMap = jsonDecode(jsonString);
User user = User.fromJson(userMap);
推荐方案
对于复杂项目,建议使用 json_serializable,它:
- 自动生成序列化代码
- 减少手写错误
- 支持嵌套对象和复杂类型
- 易于维护
选择哪种方式取决于项目复杂度和团队偏好。


