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

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
	//在请求接口页面导入,才可以使用json
	import 'dart:convert';
	
	//解析字符串并返回结果Json对象。
	JsonDecoder decoder=json.decode("");
    JsonDecoder decoderv2=jsonDecode("");//里面调用的是上面的那个
    
    //将对象转换为JSON字符串。
    String encode= json.encode(Object);
    String encodev2= jsonEncode(Object);//里面调用的是上面的那个
5、使用json_annotation
Person person=Person.fromJson(response.data);
JsonDecoder decoder=Person.toJson(person);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值