flutter - Dart:解析 api 响应并从父级动态创建子 T
问题描述
寻找一种从 API 解析数据的干净方法。
API 返回用于创建包含在元数据中的“船”和“汽车”模型的数据。
{
“timestamp” “0000”,
“data”: {
“count” “1”,
“results” [
{
“name”: “boatyMcBoatFace”
}
]
}
}
我想使用自定义fromJson()
方法为元数据和船/车数据创建 2 个类。当前的实现是这样的
Class Boat {
String name;
Boat.fromJson(json) {
this.name = json[‘name’]
}
static List<Boat> listFromJson(List<dynamic> json) {
return json.map((c) => Boat.fromJson(c)).toList();
}
}
ResponseModel<T> {
String timestamp
DataModel data
ResponseModel.fromJson(json) {
this.timestamp = json[‘timestamp’]
this.data = DataModel<T>.fromJson(json[‘data’])
}
}
DataModel<T> {
String count
List<T> results
DataModel.fromJson(json) {
this.count = json[‘count’]
this.results = json[‘results’] // change this, see below
}
}
目前我正在创建一个 ResponseModel,它反过来创建一个 DataModel。但后来我手动创建和设置船使用:
// yes
final res = methodThatMakesHttpRequest();
final apiResponse = ResponseModel<Boat>.fromJson(res);
// no
final boats = Boat.listFromJson(apiResponse.data.results);
apiResponse.data.results = boats;
理想情况下,我会删除最后两行,而是让 Boats 在内部动态创建DataModel.fromJson
,例如
DataModel.fromJson(json) {
this.count = json[‘count’]
T.listFromJson(json[‘results’])
}
但这当然不起作用,因为 T.listFromJson 不存在。
解决方案
推荐阅读
- c# - 如何通过winappdriver和inspect工具查找除屏幕坐标外具有相同名称的元素?
- javascript - 如何通过单击 ReactJS 网页上的按钮通过 USB 发送一些位?
- python - 当我将手指放在 BMP180 传感器上时,它不会更新温度
- java - 通过反射操作的字符串及其对equals方法的影响
- ios - iOS - 在 LaunchScreen 之后设置第一个屏幕
- php - 通过标签名称获取 php 数据
- python - 一旦 Apache Beam 支持 Python 3,tf.data 是否会集成到 tf.Transform 中?
- css - 当我改变它们工作的顺序时,怎么会?
- python-3.x - 查找一个句子是否与医学术语有关
- jquery - 如何使“primeng-turbo”表响应功能与“jquery datatable”响应功能相同?