json - Flutter - 如何将嵌套的 json 解析为具有泛型的类?
问题描述
我想知道如何将嵌套的 json 解析为具有泛型类型的类。我的目的是用代码和消息包装来自后端的响应(例如包含令牌的 loginRespose)
我有
class BaseResponse<T>{
int code;
String message;
T responseObject;
BaseResponse.fromJson(Map<String, dynamic> parsedJson)
: code = parsedJson['Code'],
message = parsedJson['Message'],
responseObject = T.fromJson(parsedJson['ResponseObject']); //This is what I'd like to do
}
显然最后一行会引发错误,因为 T 没有命名构造函数“fromJson”。我尝试向 Type 添加一些限制,但没有找到任何解决方案。你知道如何解决这个问题吗?
解决方案
你不能做这样的事情,至少不能颤抖。Asdart:mirror
已禁用,并且没有类构造函数的接口。
你将不得不采取不同的路线。
我会建议改用 POO。你会在这里放弃反序列化responseObject
你的BaseResponse
. 然后让子类BaseResponse
处理这个反序列化
通常,每种类型都有一个子类:
class IntResponse extends BaseResponse<int> {
IntResponse.fromJson(Map<String, dynamic> json) : super._fromJson(json) {
this.responseObject = int.parse(json["Hello"]);
}
}
然后,您可以通过添加自定义工厂构造函数来隐藏这些混乱,BaseResponse
使其更方便使用。
class BaseResponse<T> {
int code;
String message;
T responseObject;
BaseResponse._fromJson(Map<String, dynamic> parsedJson)
: code = parsedJson['Code'],
message = parsedJson['Message'];
factory BaseResponse.fromJson(Map<String, dynamic> json) {
if (T == int) {
return IntResponse.fromJson(json) as BaseResponse<T>;
}
throw UnimplementedError();
}
}
然后要么直接实例化想要的类型,要么使用工厂构造函数:
final BaseResponse foo = BaseResponse.fromJson<int>({"Hello": "42", "Code": 42, "Message": "World"});
推荐阅读
- c++ - 如何使用单循环在 C++ 中打印直角三角形
- arrays - 使用 Powershell 刷新数组复选框
- dll - 如何使用 mingw32 将 DLL 链接到程序中
- python - 如何解决此 keras 张量错误:无效参数:维度 1 的切片索引 100 超出范围
- java - 无法在 hadoop 中运行 Java 代码。获取 javac:无效标志错误
- java - Android:如何访问最近使用的表情符号?
- sql - 在 SQL 中创建视图(为每种情况选择表)
- javascript - 如何在创建资源请求时附加处理程序?(例如img源,CSS文件)
- django - Django 用户默认权限
- c# - 我的 Blazor 服务器应用程序在一台本地计算机上的 Azure B2c 登录时遇到空引用错误,但在另一台本地计算机上没有,有什么想法吗?