欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

flutter使用json_annotation实现序列化和反序列化

程序员文章站 2022-03-04 16:53:21
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 实体类

flutter使用json_annotation实现序列化和反序列化

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

相关标签: flutter