代码生成库序列化JSON——json_serializable package

json_serializable package包, 它是一个自动化的源代码生成器,可以为我们生成JSON序列化模板。

由于序列化代码不再由我们手写和维护,我们将运行时产生JSON序列化异常的风险降至最低。
pubspec.yaml中配置:
相关的最新版本

dependencies:
  # Your other regular dependencies here
  json_annotation: ^2.0.0

dev_dependencies:
  # Your other dev_dependencies here
  build_runner: ^1.0.0
  json_serializable: ^2.0.0

将我们的User类转换为一个json_serializable

import 'package:json_annotation/json_annotation.dart';

// user.g.dart 将在我们运行生成命令后自动生成
part 'user.g.dart';

///这个标注是告诉生成器,这个类是需要生成Model类的
@JsonSerializable()

class User{
  User(this.name, this.email);

  String name;
  String email;
  //不同的类使用不同的mixin即可
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

json_serializable第一次创建类时,您会看到与下图类似的错误。
代码生成库序列化JSON——json_serializable package
为了解决这个问题,我们必须运行代码生成器来为我们生成序列化模板。

  1. 一次性生成。通过在我们的项目根目录下运行flutter packages pub run build_runner build,我们可以在需要时为我们的model生成json序列化代码。 这触发了一次性构建,它通过我们的源文件,挑选相关的并为它们生成必要的序列化代码。但每次在model类中进行更改时都要手动运行构建命令。
  2. 持续生成使用_watcher_可以使我们的源代码生成的过程更加方便。它会监视我们项目中文件的变化,并在需要时自动构建必要的文件。我们可以通过flutter packages pub run
    build_runner watch
    在项目根目录下运行来启动_watcher_。只需启动一次观察器,然后并让它在后台运行,这是安全的。
    代码生成库序列化JSON——json_serializable package
    反序列化JSON字符串:
Map userMap = JSON.decode(json);
var user = new User.fromJson(userMap);

序列化:

String json = JSON.encode(user);