json - 如何将字符串反序列化为对象,然后在颤振中设置为泛型
问题描述
所以我有这个 api 调用,它的响应形式为:boolean:successful、int:responseCode、String:reponse 和 T:Data。Data 是通用的,我可以是 string、int、DataModel 等。我的问题是我无法将 Data 的 Json 或 String 转换为对象,因为类型是通用的。我尝试对称为事件资源的数据模型进行反序列化。如果我这样做,它会起作用,EventResource.fromJson(json['Data'])
但我无法将其设置为Data
. 我查看了堆栈溢出,发现这篇文章与我的here相似。_fromJson
但是当我尝试实现答案时它失败了,即使我有一个它也找不到构造函数。
这就是我所说的fromJson
:
ResponseModel responseModel = ResponseModel.fromJson(json.decode(response.body));
我的班级(响应模型):
import 'EventResource.dart';
import 'dart:convert' show json;
class ResponseModel<T> {
var successful;
int responseCode;
String response;
T Data;
ResponseModel.fromJson(Map<String, dynamic> json){
successful = json['successful'];
responseCode = json['responseCode'];
response = json['response'];
Data = Data is EventResource? EventResource.fromJson(json['Data']) :json['Data']; // this is what I want but cant get to work
}
Map<String, dynamic> toJson() {
return {
'successful': successful,
'responseCode': responseCode,
'response': response,
'Data': Data,
};
}
}
解决方案
因此,在发送了一些时间之后,我意识到Data
它可以分配类型而不是泛型,它可以var
接收任何数据,我们可以轻松地对其进行转换,而不会遇到转换泛型等问题。
class ResponseModel {
var successful;
int responseCode;
String response;
var Data;
ResponseModel.fromJson(Map<String, dynamic> json){
successful = json['successful'];
responseCode = json['responseCode'];
response = json['response'];
Data = Data is EventResource? EventResource.fromJson(json['Data']) :json['Data'];
}
Map<String, dynamic> toJson() {
return {
'successful': successful,
'responseCode': responseCode,
'response': response,
'Data': Data,
};
}
}
推荐阅读
- maven - Thorntail 没有运行集成测试,但我有一个工作项目的相同 pom.xml
- ruby-on-rails - 保持 Decendant 复选框的两个参数与父 input_field 相关
- c - 同时执行 2 个 exe 时生成一个随机数
- django - 在 django 中使用任务队列而不泄漏 kwargs
- vue.js - 如何在一个vue类中集成html代码
- python - 使用 Elmo 模型预测句子中的掩码词
- vb.net - VB.net Web 窗体项目使用 Visual Studio 即时窗口进行模糊调试
- r - 如何使用特定小时的值填充此 data.frame?
- php - 为什么会显示我的 HTML 内容而不显示我的 PHP?
- php - 安装 Laravel Composer 依赖的问题