如何将字符串反序列化为对象,然后在颤振中设置为泛型

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,
    ;
  


【讨论】:

以上是关于如何将字符串反序列化为对象,然后在颤振中设置为泛型的主要内容,如果未能解决你的问题,请参考以下文章

Jackson序列化(8)— 支持泛型的反序列化

将JSON字符串反序列化为指定的.NET对象类型

将cXML反序列化为C#类

built_value 如何将 json 数组反序列化为对象数组?

如何将对象的json数组反序列化为字典[重复]

如何将所有字段都是默认值的类型反序列化为 None ?