【发布时间】:2020-09-25 21:29:19
【问题描述】:
我是 Flutter 的新手,正在尝试实现类似于 Swift 通用可解码的东西,如下所示:
struct ParentJson<T>: Decodable where T: Decodable
经过几个小时的搜索,我发现有 2 个库具有相同的用途 built_value 和 json_annotation 并有一句话说, Dart does not do generic type erasure。
我正在尝试解析下面的 json:
{
"status": 200,
"message": "This message",
"data": {
"uid": "tested",
"email": "test@gmail.com",
"name": "test"
}
}
在这种情况下,data 可以不同,这就是我想要使数据通用的地方。
built_value generic example T 必须在 addBuilderFactory 中指定为指定类型,正如 David 提到的 here。
而this 是一个带有json_annotation 的官方示例。
这两种方式都完全违反了泛型的概念,因为我需要在父类或序列化器中声明所有不同的类型,而不是简单地编写如下代码:
Parent<User> user = Parent<User>.deserialize(json.decode(jsonString))
所以 Dart 和 Flutter 专家的问题是,
- 这是 Dart 语言限制吗?
- 有没有什么方法可以实现解析json的通用值 违反通用概念?
【问题讨论】:
-
Dart 泛型已被具体化,所以我不认为这是语言限制。
-
@AluanHaddad,这两个库是 Flutter 团队的 Andrew 和 Matt 推荐的,它处理多个对象状态,这对于避免 Flutter 中的内存泄漏非常重要,但不幸的是我找不到任何使用通用对象解析 json 的在线示例。
-
很遗憾,我没有任何使用 Flutter 的经验,我只是说应该可以对具体化泛型类型进行操作。
标签: json flutter generics dart