Flutter json_serializable 使用简单配置

859 阅读1分钟

一、 第一步配置

在 pubspec.yaml 文件中配置

dependencies: 
    json_annotation: ^4.4.0   # 注解类需要(@JsonSerializable())

dev_dependencies:
    build_runner:
    json_serializable:

二、第二步实体类

import 'package:json_annotation/json_annotation.dart';#这个必须import
part 'xxx.g.dart';#xxx和文件名相同 小写 会生成文件 xxx.g.dart

@JsonSerializable()#表示需要生成序列化文件
class AAA{
}

三、第三步生成相应文件

命令行执行

flutter packages pub run build_runner build

四、第四步手动添加读fromJson tojson

factory AAA.fromJson(Map<String,dynamic> json)=> _$AAAFromJson(json);
Map<String,dynamic> tojson()=> _$AAAToJson(this);

五、泛型问题

报错

   ╷
13 │   T? data;
   │      ^^^^
   ╵

按提示修改注解

@JsonSerializable(genericArgumentFactories: true)
class AAA{
}

fromjson tojson

factory ResponseModel.fromJson(
        Map<String, dynamic> json, T Function(Object? json) fromJsonT) =>
    _$ResponseModelFromJson(json, fromJsonT);

Map<String, dynamic> tojson(
  Object? Function(T value) toJsonT,
) =>
    _$ResponseModelToJson(this, toJsonT);

使用(还未验证 太晚了)

ResponseModel<DataBean> ss=new ResponseModel();
//对象转json
var json= ss.tojson((value) => ss.data);
//json转对象
ResponseModel.fromJson(json, (jsonT)=> DataBean.fromJson(jsonT as Map<String,dynamic>));