侧边栏壁纸
博主头像
此间少年

行动起来,活在当下

  • 累计撰写 10 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

flutter处理json序列化与反序列化

Administrator
2024-11-28 / 0 评论 / 0 点赞 / 115 阅读 / 0 字 / 正在检测是否收录...

使用 json_serializable 方式

json_serializable是目前项目中最常用实现json序列化与反序列化的方法,主要的步骤是

pubspec.yaml中添加依赖:

environment:
  sdk: ^3.5.4

dependencies:
  flutter:
    sdk: flutter

  # json注解
  json_annotation: ^4.9.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  # json序列化
  json_serializable: ^6.8.0

  # 代码生成
  build_runner: ^2.4.13

创建实体类:

part 'user.g.dart';

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

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

  factory User.fromJson(Map<String, dynamic> json) {
    return _$UserFromJson(json);
  }

  Map<String, dynamic> toJson() {
    return _$UserToJson(this);
  }
}

手动添加fromJsontoJson 方法

自动生成.g文件:

在终端中执行flutter packages pub run build_runner build --delete-conflicting-outputs 在当前目录会自动生成user.g.dart 文件

使用:

User user = User.fromJson({"name": "张三", "age": 18});

Map<String, dynamic> json= user.toJson();

总结:

优点:

  • 自动生成,避免人为错误

缺点:

  • 每次更新内容后都需要重新生成

  • 实体类里面需要手动添加方法

使用 json 库方式(实验室)

除了使用json_serializable外flutter还提供了用json库通过自定义宏的方式来实现

pubspec.yaml中添加依赖:

dependencies:
  flutter:
    sdk: flutter

  # json序列化
  json: ^0.20.2

analysis_options.yaml 中添加配置:

analyzer:
  enable-experiment:
    - macros

创建实体类:

@JsonCodable()
class User {
  String? name;

  int? age;
}

使用:

User user = User.fromJson({"name": "张三", "age": 18});

user.toJson();

需要使用--enable-experiment=macros 运行程序

总结:

优点:

  • 自动生成

  • 不需要手动添加方法

缺点:

  • 还是实验室产品,功能还不完善

0
博主关闭了所有页面的评论