我想知道如何将嵌套的 json 解析为具有泛型类型的类。我的意图是用代码和消息包装来自后端的响应(例如包含 token 的 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 添加一些限制,但没有找到任何解决方案。您对如何实现这一点有任何想法吗?
最佳答案
你不能做这样的事情,至少不能 flutter 。由于 dart:mirror
被禁用并且类构造函数没有接口(interface)。
您将不得不采取不同的路线。
我建议改用 POO。您将在这里放弃从 BaseResponse
反序列化 responseObject
。然后让 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"});
关于json - Flutter - 如何将嵌套的 json 解析为具有泛型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51575371/