FlutterJsonBeanFactory
使用该插件可以快速的实现Json转实体类,很多代码都会由系统自动生。
-
models为项目自建目录,即右键选择创建实体类的目录,生成的实体类存放在该目录; -
generated/json为插件生成目录,其中xxx_entity.g.dart根据实体类生成的类辅助方法,.g.dart 为后缀。主要包含\$XxxFromJson和\$XxxToJson两个方法,以 $ +实体类名 为前缀。base目录下为基础公共代码。 -
生成实体类后如果要对实体字段进行修改,比如增加字段或者修改字段类型、名称等,修改完以后后使用
Alt + J即可重新生成对应的代码。
JSONField
使用JSONField 后一定要 Alt + J 重新生成代码。
- 自定义字段名
//Json 里的字段为 `AGE` 需要映射到实体类的 `age` 字段
String? id;
String? name;
@JSONField(name: "AGE")
int? age;
2.忽略字段
serialize 、 deserialize 用于序列化和反序列化时忽略某个字段。
如果不需要解析 name 字段则可设置 deserialize 为 false
如果 toJson 时不需要序列化某个字段,则设置 serialize 为 false。
@JSONField(deserialize: false)
String? name;
//------
String userData = """
{
"id":"12313",
"name":"loongwind",
"AGE":18
}
""";
UserEntity user = UserEntity.fromJson(jsonDecode(userData));
print(user.name); // null
@JSONField(serialize: false)
String? name;
//------
UserEntity user = UserEntity();
user.id = "123";
user.name = "loongwind";
user.age = 18;
print(user.toJson()); // {id: 123, AGE: 18}
单实体一解析
String userData = """
{
"id":"12313",
"name":"loongwind",
"age":18
}
""";
UserEntity user = UserEntity.fromJson(jsonDecode(userData));
或
UserEntity? user = jsonConvert.convert<UserEntity>(jsonDecode(userData));
或
UserEntity? user = jsonConvert.asT<UserEntity>(jsonDecode(userData));
或
UserEntity? user = JsonConvert.fromJsonAsT<UserEntity>(jsonDecode(userData)
//fromJson 需要的参数是 Map ,所以需要先使用 jsonDecode 将 Json 字符串转换为 Map
List 解析
String userData = """
[
{
"id":"12313",
"name":"loongwind",
"age":18
},
{
"id":"22222",
"name":"cmad",
"age":25
}
]
""";
// 泛型为为对应 List 的类型
List<UserEntity>? users = jsonConvert.convert<List<UserEntity>>(jsonDecode(userData));
List<UserEntity>? users = jsonConvert.asT<List<UserEntity>>(jsonDecode(userData));
List<UserEntity>? users = JsonConvert.fromJsonAsT<List<UserEntity>>(jsonDecode(userData));
//泛型为 List Item元素的泛型类型,
List<UserEntity?>? users = jsonConvert.convertList<UserEntity>(jsonDecode(userData));
List<UserEntity>? users = jsonConvert.convertListNotNull<UserEntity>(jsonDecode(userData));