如何将字符串反序列化为对象,然后在颤振中设置为泛型
Posted
技术标签:
【中文标题】如何将字符串反序列化为对象,然后在颤振中设置为泛型【英文标题】:How to deserialize a string to a object and then set as a generic in flutter 【发布时间】:2020-12-26 01:21:42 【问题描述】:所以我有这个 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,
;
【问题讨论】:
【参考方案1】:因此,在发送了一些时间之后,我意识到与其让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,
;
【讨论】:
以上是关于如何将字符串反序列化为对象,然后在颤振中设置为泛型的主要内容,如果未能解决你的问题,请参考以下文章