插件介绍
json_annotation
和json_serializable
:是负责序列化和反序列化的; json_serializable
, 可自动生产反序列化代码;
dependencies:
flutter:
sdk: flutter
json_annotation: ^3.0.0
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
json_serializable: ^3.2.0
build_runner: ^1.6.5 # 用于自动生成代码
编写创建对象代码
-
利用大佬写的工具json2dart
json2dart
-
创建对象文件, 并复制上面的代码, 粘贴进去
创建对象文件, 并复制上面的代码, 粘贴进去
-
执行命令
flutter packages pub run build_runner build lib
进行一次性构建,效率比较低 -
执行命令
flutter packages pub run build_runner watch lib
这个命令可以实时文件监听,自动创建实体类生成对应的.g.dart文件。

使用
- 初始化数据源
注意:创建Map时, 一定要指定类型, 不然报下面的错误:
type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
class _MyHomePageState extends State<MyHomePage> {
// 创建Map时, 一定要指定类型, 不然报下面的错误
Map <String, dynamic>resDic = {};
ResponseModel model;
@override
void initState() {
super.initState();
_initResDic();
}
......
}
/*初始化数据源*/
_initResDic() {
resDic = {
"status": 1,
"data": {
"pageData": {
"pageNum": 1,
"curPage": 1,
"perPage": 10
},
"hosList": [
{
"id": 190,
"name": "阜外医院",
"illId": 1,
"introduction": "北京阜外医院(全名:中国医学科学院阜外心血管病医院)的前身是解放军胸科医院,始建于1956年,心血管病研究所始建于1962年,由我国胸心外科的奠基人之一吴英恺院士一手创办。北京阜外医院、心血管病研究所是隶属于卫生部、中国医学科学院、中国协和医科大学的三级甲等心血管病专科医院。",
"level": "三甲",
"imgurl": "https://t.duodian.api.cheng1hu.com/attachment/hospital/2019/07/01/15/0c365acdfeb18bfc0806a7a922bee800.jpg"
}
]
}
};
}
- 字典转对象
_jsonTest() {
ResponseModel model = ResponseModel.fromJson(resDic);
List <HosList> hosList = model.data.hosList;
HosList hosListModel = hosList[0];
print(hosListModel.introduction);
}
- 对象转字典
/*对象转字典*/
_objToJson() {
var map = model.data.pageData.toJson();
print(map);
print(map.runtimeType);
}
/**
打印结果:
flutter: {pageNum: 1, curPage: 1, perPage: 10}
flutter: _InternalLinkedHashMap<String, dynamic>
*/
注意: 发现toJson()
只能转单层的, 对于多层嵌套的结构, 还存在bug;
/*对象转字典*/
_objToJson() {
print('---------------------对象转字典---------------------');
print(model);
Map dic = model.toJson();
print(dic);
print(dic.runtimeType);
}
/**
flutter: ---------------------对象转字典---------------------
flutter: Instance of 'ResponseModel'
flutter: {status: 1, data: Instance of 'Data'} // 第二层对象就没办法转了.
flutter: _InternalLinkedHashMap<String, dynamic>
*/
网友评论