flutter使用json_annotation实现序列化和反序列化-程序员宅基地

技术标签: flutter  

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);
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43841938/article/details/110272429

智能推荐

学计算机每天都没时间,大学里“苦不堪言”的5大专业,忙到没有时间谈恋爱,学生累成狗...-程序员宅基地

文章浏览阅读301次。五月已经悄悄地过去了一半,高中生们也即将迎来改变命运的高考。在高中时代,无论是家长还是老师,都会以过来人的身份告诉高中生们:熬过这三年,上了大学就轻松了。很多高中生对此深信不疑,而且对大学的生活无比憧憬和向往,并且已经开始选择自己心仪的城市和院校了。然而万万没有想到的是,上了大学以后,不同专业的学生却是过着截然不同的生活。艺术生到处写生找灵感,师范生忙着领略教师的风采,医学生却是忙着奔走于教室和图..._计算机专业的大学生每天有多累

java分布式集群项目_Java企业级电商项目实战 Tomcat集群与Redis分布式-程序员宅基地

文章浏览阅读130次。本套课程包含:java电商项目实战课程 Tomcat集群视频教程 Redis项目实战课程课程目录1-1 课程导学1-2 大型Java项目架构演进解析1-3 一期课程与问答服务回顾1-4 一期项目结构和代码回顾1-5 课程使用系统及技术版本介绍(一期+二期)1-6 二期项目初始化第2章 Lombok框架集成及原理解析本章会对Lombok框架进行介绍,同时会讲解Lombok的原理。并手把手领着小伙伴们..._java redis集群企业级

c语言实验函数调用程序设计,C语言实验四实验报告——函数-程序员宅基地

文章浏览阅读841次。南昌大学c语言考试一、 实验项目名称函数二、 实验目的1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法;2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;3.在编程过程中加深理解函数调用的程序设计思想。三、实验内容1.多模块的程序设计与调试的方法;2.函数的定义和调用的方法;3..._函数调用程序设计实验结论怎么写

C4D笔记(no.1)_c4d柔和选择-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏21次。文章目录1、xxx2课、视窗的操作2.1、右上角视窗多种:提供不同功能2.2、视图相关2.2.1、视图的操作:2.2.2、前、上、右视图切换2.2.3、双视图设置(默认4视图)2.3、自动保存2.4、自定义面板与快捷键2.4.1、自定义面板:2.4.2、增加按钮2.4.3、删除按钮2.4.4、新建面板2.5 网格(地面)、全屏模式2.5.1 网格(地面)2.5.2 全屏模式3课、模型相关3.1模型显示方式3.2 模型最大显示3.3 后退与前进(后撤与重做)3.4 选择3.4.1 实时选择(快捷键 “9”)3_c4d柔和选择

在线画图工具-流程图、思维导图、原型图等-程序员宅基地

文章浏览阅读308次。pixso是用于 软件原型设计的一款工具,类似于Axure和figma等等,里面社区中同样有大量模板,并且含有较为丰富的插件,但是还在开发中,功能还未完善,比如还不支持在线交互,对于一般的UI设计是足够用的,相比于需要付费的Axure,是较好的一个选择,目前公司中大部分还是选择使用功能完善的Axure。国内的一款画图工具,同样是适合画流程图、思维导图等常规图片,可以协作,优点是其中的社区包含大量模板可以使用,但是不太推荐,因为不开会员的话只能创建3个文件,而且导出高清图片照样需要会员。

【雕爷学编程】MicroPython手册之 ESP8266 硬件SPI总线_8266 spi-程序员宅基地

文章浏览阅读321次,点赞2次,收藏2次。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。通过设置SPI通信参数和片选引脚,然后在循环中选择设备(通过片选引脚),发送数据并接收对应的数据,将接收到的数据打印出来。1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。SPI 总线的通信过程需要遵循一定的协议和顺序,如先发送 SS 信号选择从机,再发送或接收数据,最后取消 SS 信号释放总线。_8266 spi

随便推点

android4.4.2link2sd,Android Studio 2.3 特性:生成Android App Links-程序员宅基地

文章浏览阅读192次。移动应用开发时常遇到应用跳转、h5唤起原生页面等使用场景,所以一个健壮的应用需要具备路由的能力。常见的操作方法需要在manifest中针对每个页面进行配置,设想应用有大量的页面那配置工作岂不是费时费力,所以我们便来一起看看Android Studio 2.3给我们带来了什么便利概览及使用App Links是Android M以上的特有功能,即实现了auto-verify支持用户点击一个链接即可唤起..._androidstudio 中link使用

hive中行转列、列转行的实现_hive 列转行str_to_map-程序员宅基地

文章浏览阅读8.6k次,点赞2次,收藏26次。行转列实现:表信息:test_rowcol(dt_m,vaild_num, unvaild_num)场景一:使用concat_ws和collect_set函数select dt_m, 'vaild_num', concat_ws(',', collect_set(vaild_num)) from test_rowcol group by dt_m union allsel..._hive 列转行str_to_map

python怎么安装sympy库_python中sympy库求常微分方程的用法-程序员宅基地

文章浏览阅读136次。问题1:程序,如下from sympy import *f = symbols('f', cls=Function)x = symbols('x')eq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))print(dsolve(eq, f(x)))结果Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2)附:布置考试..._怎么安装sympy库

python如果输入错误提醒_如果输入了无效的输入,如何让python程序退出并显示错误消息?...-程序员宅基地

文章浏览阅读981次。这是我目前掌握的密码。。在#solving a quadratic equation#finding conjugate pair of imaginary roots if no real rootsimport mathimport sysa = float(input('Enter a: '))b = float(input('Enter b: '))c = float(input('Ent..._python如何设定输入不全程序退出

c语言编程项目实践报告快递管理系统,学生成绩管理系统C语言程序设计实践报告.doc...-程序员宅基地

文章浏览阅读628次。学生成绩管理系统C语言程序设计实践报告(此文档为word格式,下载后您可任意编辑修改!)中南大学C语言程序设计实践报告题 目 学 生 成 绩 管 理 系 统学生姓名 木雕小象指导教师 × × ×学 院 信 息 科 学 与 工 程 学 院专业班级 电 气 0900..._c语言快递管理系统的项目简历咋写

linux中chdir函数,linux之chdir函数解析-程序员宅基地

文章浏览阅读891次。[lingyun@localhost chdir]$ lschdir.c[lingyun@localhost chdir]$ cat chdir.c/********************************************************************************** Copyright: (C) 2013 fulinux* ..._linux chdir 函数

推荐文章

热门文章

相关标签