Flutter - 带有 Dart 的通用 json 序列化器
Posted
技术标签:
【中文标题】Flutter - 带有 Dart 的通用 json 序列化器【英文标题】:Flutter - Generic json serializer with Dart 【发布时间】: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 的经验,我只是说应该可以对具体化泛型类型进行操作。 【参考方案1】:实际上,有适合您用例的解决方案。 这是一个https://github.com/k-paxian/dart-json-mapper 库。
我很确定您正在寻找类似this 的东西。 您会发现工作单元测试说明了您的用例。
【讨论】:
以上是关于Flutter - 带有 Dart 的通用 json 序列化器的主要内容,如果未能解决你的问题,请参考以下文章