Flutter:json_serializable忽略可为null的字段,而不是抛出错误



假设有两个模型用户城市

@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是可选的,我希望它应该解析CitylistMapCity为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});
}

相关内容

  • 没有找到相关文章

最新更新