flutter使用json_annotation实现序列化和反序列化
程序员文章站
2022-06-15 21:20:40
1、在pubspec.yaml引入依赖包dependencies: json_annotation: ^3.0.0dev_dependencies: build_runner: ^1.0.0 json_serializable: ^3.2.02、创建xx 实体类import 'package:json_annotation/json_annotation.dart';part 'example.g.dart';@JsonSerializable()class Person...
1、在pubspec.yaml引入依赖包
dependencies:
json_annotation: ^3.0.0
dev_dependencies:
build_runner: ^1.0.0
json_serializable: ^3.2.0
2、创建xx 实体类
import 'package:json_annotation/json_annotation.dart';
part 'example.g.dart';
@JsonSerializable()
class Person {
//这个标注是将后台返回的key转成我们自己想要的key
// @JsonKey(name: "first_name")
final String firstName;
Person(this.firstName);
//JSON转模型的方法
factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
//模型转JSON的方法
Map<String, dynamic> toJson() => _$PersonToJson(this);
}
- @JsonSerializable() 注解在class上 代表该类有需要自动生成补全的代码
- @JsonSerializable(includeIfNull: false)
当对象作为另一个对象的成员变量使用时,如果值为null,toJson转成字符串时,不生成对应字段 - @JsonKey(name: ‘xxx’) 获取json字符串里的xxx字段,并赋值给对应成员变量
- @JsonKey(nullable: false) 同上json字符串中该字段不能为空,如果缺少字段,会运行时异常 nullable: false 的字段在构造函数里的必填的
- @JsonKey(includeIfNull: false) 如果值为null,toJson转成字符串时,不生成对应字段
- @JsonKey(name: ‘date-of-birth’, nullable: false)
获取json字符串里的xxx字段,并赋值给对应成员变量,并且json字符串中字段不能为空
注JsonSerializable()注解的类一定要有构造函数,否则转换失败
3、build xx.g.dart文件
在android studio左下角有个Terminal,打开
使用命令flutter packages pub run build_runner build进行一次性构建,构建过程中flutter会使用Model类的源文件(包含@JsonSerializable标注的)来生成对应的.g.dart文件。
另外,也可以使用命令flutter packages pub run build_runner watch,这个命令可以实现文件监听,自动地为你后续创建的实体类生成对应的.g.dart文件。
4、使用json_annotation
//在请求接口页面导入,才可以使用json
import 'dart:convert';
//解析字符串并返回结果Json对象。
JsonDecoder decoder=json.decode("");
JsonDecoder decoderv2=jsonDecode("");//里面调用的是上面的那个
//将对象转换为JSON字符串。
String encode= json.encode(Object);
String encodev2= jsonEncode(Object);//里面调用的是上面的那个
本文地址:https://blog.csdn.net/weixin_43841938/article/details/110272429
下一篇: Java中方法使用的深入讲解