首页 > 解决方案 > 如何将字符串反序列化为对象,然后在颤振中设置为泛型

问题描述

所以我有这个 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,
    };
  }
}

标签: jsonfluttergenericsserializationjson-deserialization

解决方案


因此,在发送了一些时间之后,我意识到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,
    };
  }

}

推荐阅读