gpt4 book ai didi

json - Flutter - 如何将嵌套的 json 解析为具有泛型的类?

转载 作者:IT老高 更新时间:2023-10-28 12:33:16 31 4
gpt4 key购买 nike

我想知道如何将嵌套的 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com