flutter - Flutter:使用 json_serializable 将 json 转换为模型时出现问题
问题描述
假设有两个模型User和City
@JsonSerializable()
class User {
int id;
String name;
City? city;
}
@JsonSerializable()
class City {
int id;
String name;
}
现在假设在 API 调用期间,我们有一个用户模型,但在城市对象模型中,我们只得到id而不是name。像这样的东西
{
"id": 5,
"name": "Matthew",
"city": {
"id": 12
}
}
但是由于 json_serializable 和 json_annotation 的默认性质。此 JSON 未映射到 User 模型,在映射期间,它会引发异常。
Null 类型不是 String 类型的子类型。(因为这里的城市对象中缺少名称键)
但正如我们已经在 User 对象中声明的那样,City 是可选的,我希望它应该解析带有 city 为 null 的 User JSON。
任何帮助或解决方案将不胜感激,谢谢
解决方案
目前不支持仅在序列化或仅在反序列化时忽略某个字段。您可以忽略两者,也可以不忽略。但是,我使用了一种解决方法。
- 在模型文件中创建一个只返回 null 的全局方法,如下所示:
T? toNull<T>(_) => null;
- 在您的模型中为 City
User
添加一个自定义项:JsonKey
@JsonKey(fromJson: toNull, includeIfNull: false)
City? City;
这样做是从 Json 转换时,它使用您指定的函数进行转换city
并将您的值替换为 null。然后由于includeIfNull
属性,它只是跳过解析。
推荐阅读
- reactjs - FCM 网络推送通知 Google Analytics
- scala - 无法从 Spark 应用程序连接到 Hive 元存储
- javascript - 如何缩短 Firebase 身份验证令牌的过期时间以进行测试
- php - PHP:单击后退按钮仍会重定向到上一页
- c++ - 如何使用 GO 语言读取可能是两种不同数据类型之一的 HDF5 属性?
- python - 无法在 google colab 上安装 functools32
- bazaar - 查看最新的开发版本
- postgresql - PostgreSQL:DISTINCT 中的最新行的性能低于 GROUP BY 中的最大行
- c# - .NET Core 依赖注入;尝试激活服务时无法解析类型“System.String”的服务
- linux - Windows MBR 被 linux 命令覆盖 dd if=/dev/zero of=/dev/sdb bs=512 count1