如何将通用结构与 JsonSerialized 一起使用

问题描述 投票:0回答:1

由于我的数据可以是购物车或列表类型,所以我想使用通用结构。当使用 JsonSerialized 的通用类型时,我的代码可能做错了什么?我的代码如照片所示。如何将通用结构与 JsonSerialized 一起使用? 这是我得到的错误;

When you run it in debug mode, in the static T _fromJson<T>(Object json) method return _fromJson(json); It stops and gives this error =>Parse Error: Stack Overflow - response body: {data: [{id: 1, firmno: 2, delete: 0, code: CR00001,}]}

enter image description here 我的代码;

 @JsonSerializable(explicitToJson: true,genericArgumentFactories: true)
class CartResponseModel<T> extends INetworkModel<CartResponseModel>  {
  @JsonKey(fromJson: _fromJson, toJson: _toJson)
  final T? data;
  final bool? success;
  final String? message;
  static T _fromJson<T>(Map<String, dynamic> map) {
    // same logic as JsonConverter example
  
    return _fromJson(map);
  }
 
  static Object _toJson<T>(T object) {
    // same logic as JsonConverter example
    return _toJson(object);
  }
  CartResponseModel({this.data, this.success, this.message});
  @override
  CartResponseModel fromJson(Map<String, dynamic> json) {
   return _$CartResponseModelFromJson<T>(json, (json) => _fromJson(json!));
  }
  @override
  Map<String, dynamic>? toJson() {
    return _$CartResponseModelToJson(this, (value) => _toJson(value));
  }
  factory CartResponseModel.fromJson(Map<String ,dynamic>json){
    return _$CartResponseModelFromJson<T>(json, (json) => _fromJson(json!));
  }
}
flutter generics jsonserializer
1个回答
0
投票

如果我理解你的话,你可能需要在序列化之前检查 abject 是否是一个列表。

static T _fromJson<T>(Map<String, dynamic> map) {
  if (T == List) {
    if (map.containsKey('data') && map['data'] is List) {
      List<dynamic> jsonDataList = map['data'];
      List<T> resultList = [];
      for (var jsonData in jsonDataList) {
        resultList.add(_fromJson<YourCustomClass>(jsonData));
      }
      return resultList as T;
    } else {
      return [] as T;
    }
  } else {
    return YourCustomClass.fromJson(map) as T;
  }
}

请告诉我这是否是您正在寻找的。如果没有请提供更多说明

© www.soinside.com 2019 - 2024. All rights reserved.