Flutter中如何使用json_serializable进行JSON序列化

在Flutter项目中,我已经按照官方文档添加了json_serializable依赖,但在实际使用时遇到几个问题:

  1. 如何正确定义模型类才能使json_serializable自动生成代码?是否需要特定的注解格式?
  2. 运行build_runner时总是提示"Could not generate toJson",但我的字段都是基本类型,哪里可能出错了?
  3. 生成的.g.dart文件应该如何处理?需要手动导入吗?还是配置后会自动关联?
    希望能得到具体代码示例和解决方案。
2 回复
  1. 添加依赖:json_annotationjson_serializablebuild_runner
  2. 创建模型类,使用@JsonSerializable注解。
  3. 运行命令生成代码:flutter pub run build_runner build
  4. 在模型类中实现fromJsontoJson方法。

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


在Flutter中使用json_serializable进行JSON序列化,可以自动生成序列化代码,提高开发效率。以下是详细步骤:

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  json_annotation: ^4.8.1

dev_dependencies:
  build_runner: ^2.4.6
  json_serializable: ^6.7.1

运行 flutter pub get 安装依赖。

2. 创建数据模型类

创建一个数据类,并使用注解标记:

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart'; // 生成的文件

@JsonSerializable()
class User {
  final String name;
  final int age;
  final String email;

  User({required this.name, required this.age, required this.email});

  // 从JSON映射到对象
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  // 从对象映射到JSON
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 生成代码

运行以下命令生成序列化代码:

flutter pub run build_runner build

或监听文件变化自动生成:

flutter pub run build_runner watch

4. 使用示例

// 从JSON字符串解析为对象
Map<String, dynamic> userMap = jsonDecode('{"name": "Alice", "age": 25, "email": "alice@example.com"}');
User user = User.fromJson(userMap);

// 将对象转换为JSON字符串
String jsonString = jsonEncode(user.toJson());

注意事项

  • 确保类中的字段与JSON键名一致,或使用 @JsonKey(name: 'json_name') 指定映射。
  • 每次修改模型类后,需重新运行代码生成命令。
  • 支持嵌套对象、列表等复杂结构。

通过以上步骤,即可高效实现JSON序列化与反序列化。

回到顶部