flutter json_annotation和json_serializable处理json数据序列化

  • 导包

dependencies:
json_annotation: ^2.4.0 dev_dependencies:
fluttertoast: ^2.0.3
json_serializable: ^3.0.0
build_runner: ^1.6.0
  • 创建Author实体类(举例子,新建文件author.dart)

  • author.dart

import 'package:json_annotation/json_annotation.dart';

part 'author.g.dart';

@JsonSerializable() //注解
class Author {
String name;
String title;
int id;
Author({this.name, this.title, this.id}); factory Author.fromJson(Map<String, dynamic> json) => _$AuthorFromJson(json); Map<String, dynamic> toJson(Author instance) => _$AuthorToJson(instance);
}

效果图:

这里有几点需要注意的

1、当我们初次创建Author.dart的时候,需要加入    part 'Author.g.dart';  虽然系统会提示报错,但是不必紧张,这个我们一会生成Author.g.dart文件所必须的条件,我们暂时不要管它报不报错

2、在需要转换的实体dart类前 加入@JsonSerializable()注解,表示需要json序列话处理

3、fromJson()  方法和 toJson()方法的写法是固定模式的,大家按模板修改就行

接下来我们就该见证奇迹的发生了

我们cd到项目的根目录,然后使用  flutter packages pub run build_runner build  这条指令去生成Author.g.dart文件

修改图如下:

然后我们就会在Author.dart的下面发现一个Author.g.dart文件,到此结束,我们开始验证是否有效

  • 编写测试类

import 'package:flutter/material.dart';
import '../model/author.dart'; class NoticePage extends StatefulWidget{
@override
_NoticePageState createState() => _NoticePageState();
} class _NoticePageState extends State<NoticePage>{
void _getData() async {
var obj = {"name":"whisky", "title":'阿发生的发生阿斯蒂芬暗示法按时', "id":2020};
var c = Author.fromJson(obj);
print("作者的名字是:"+c.name);
print("作者的名字是:"+c.title);
print('${c.id}');
print('${c.id.runtimeType}');
print(c);
} @override
void initState(){
super.initState();
_getData();
} @override
Widget build(BuildContext context){
final _main = Container(
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.all(30),
child: Column(
children: [
Text('notice')
],
),
);
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('我的消息',style: TextStyle(color: Colors.white)),
),
body: _main,
);
}
}

打印结果:

测试完成,谢谢大家!!!

最新文章

  1. android给View设置上下左右边框
  2. iOS APP上架过程常见问题
  3. 5.1---二进制数插入(CC150)
  4. TestNg线程池配置、执行次数配置、超时配置
  5. 20145301&amp;20145321&amp;20145335实验二
  6. cocos2d-html5 笔记5: 事件
  7. 利用dex2jar反编译apk
  8. 186. Reverse Words in a String II
  9. String 、InputStream、Reader 的转换
  10. JQuery+CSS3实现封装弹出登录框效果
  11. 手把手带你画一个动态错误提示 Android自定义view
  12. R--线性回归诊断(二)
  13. Django——邮件发送
  14. CAP二十年:“规则”变了
  15. jq 折面板+tab切换(自己封装的插件哦!!)
  16. Flex验证器 validate stringvalidate
  17. 三个&lt;li&gt;元素放一行
  18. [leetcode]Regular Expression Matching @ Python
  19. js中的deom ready执行的问题
  20. 关于Hibernate Could not obtain transaction-synchronized Session for current thread

热门文章

  1. 90%的开发都没搞懂的CI和CD!
  2. CSS 选择器及优先级
  3. UnitTest单元测试框架解析【实用篇】
  4. TextBox控件保存上次的输入
  5. 华为手机logcat中不显示log.e以下级别日志的解决方法
  6. [BUUOJ记录] [GXYCTF2019]BabySQli
  7. C++11的decltype关键字
  8. 20190925-02配置redis服务在后台启动 000 023
  9. console线和RJ45
  10. windows-android-appium环境搭建