假设有两个模型用户和城市
@JsonSerializable()
class User {
int id;
String name;
City? city;
List<Map<String, City>>? listMapCity;
}
@JsonSerializable()
class City {
int id;
String name;
}
现在假设在API调用期间,我们有一个用户模型,但在城市对象模型中,我们只得到id,而不是name。像这样的
{
"id": 5,
"name": "Matthew",
"city": {
"id": 12
}
}
但是由于json_serializable和json_annotation的默认性质。此JSON没有映射到用户模型,在映射过程中,它抛出异常
类型Null不是类型String的子类型。(因为此处名称密钥在城市对象中丢失(
但是,正如我们已经在User对象中声明的那样,City是可选的,我希望它应该解析City和listMapCity为null的User JSON。
任何帮助或解决方案都将不胜感激,谢谢
您需要将includeIfNull标志设置为false,以使自动生成的代码正确处理null。
@JsonSerializable(includeIfNull: false)
该属性应该用?按照你的例子。
您需要在JsonSerializableUser
类上有一个默认构造函数。然后,如果name
应该是可为null的,则使用可为nullString? name;
声明它
这是更新后的User类。
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
int id;
String name;
City? city;
List<Map<String, City>>? listMapCity;
User({required this.id, required this.name, this.city, this.listMapCity});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
@JsonSerializable()
class City {
int id;
String name;
City({required this.id, required this.name});
}