我对Flutter是个新手,来自.NET的世界。
在.NET中,我有类似httpclient.GetFromJsonAsync<User>的东西来执行GET并将其反序列化为User对象。在Flutter中,我使用的是Dio,我看到他们有类似的查看方法,get<T>。然而,即使我使用get<List<User>>或get<User>,它总是抛出运行时错误,尽管代码被成功编译,但它无法将List<dynamic>转换为List<User>或将Map转换为User。
final List<User> response = await Dio().get<List<User>>('urlThatReturnListOfUser');有没有更好的方法或包来反序列化动态/映射到对象?
到目前为止,我找到的最好的方法是使用Json_Serializable,但即使这样,我仍然需要编写如下内容
final List<User> weathers = (response.data as List)
.map((e) => User.fromJson(e as Map<String, dynamic>))
.toList();每次我调用API时。或者这是我目前最好的选择?还是我用错了Dio?
发布于 2020-11-19 15:37:06
这样的库需要使用运行时反射,这在Flutter中是禁用的。运行时反射会干扰树摇动,Dart已经支持了很长一段时间。使用树抖动,您可以从您的发布构建中“摆脱”未使用的代码。这大大优化了应用程序的大小。因为反射使得默认情况下所有代码都被隐式使用,所以它使得摇动树变得困难。这些工具无法知道哪些部分在运行时未使用,因此很难去除冗余代码。在使用反射时,应用程序的大小不容易优化。尽管您不能将运行时反射与Flutter一起使用,但一些库提供了类似的易于使用的API,但它们基于代码生成。此方法在代码生成库一节中有更详细的介绍。
https://flutter.dev/docs/development/data-and-backend/json
不幸的是,您目前使用的是最准确的反序列化方法。
https://stackoverflow.com/questions/64887593
复制相似问题