Flutter如何实现序列化

在Flutter中如何实现对象的序列化和反序列化?目前项目需要将复杂对象转换为JSON进行网络传输或本地存储,尝试了手动编写toJson/fromJson方法但比较繁琐。有没有更高效的方案?比如使用json_serializablebuilt_value这类库时,具体应该如何配置和生成代码?能否提供一个完整的示例,包括模型类定义、注解添加以及build_runner的使用步骤?

2 回复

Flutter中实现序列化主要有两种方式:

  1. 手动序列化:使用dart:convert库,通过jsonEncode()jsonDecode()方法手动转换模型类与JSON。

  2. 自动序列化:使用json_serializablebuilt_value等库,通过注解自动生成序列化代码,减少手动编写的工作量。

推荐使用json_serializable,效率高且易于维护。

更多关于Flutter如何实现序列化的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在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,它:

  • 自动生成序列化代码
  • 减少手写错误
  • 支持嵌套对象和复杂类型
  • 易于维护

选择哪种方式取决于项目复杂度和团队偏好。

回到顶部