由于我的数据可以是购物车或列表类型,所以我想使用通用结构。当使用 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,}]}
@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!));
}
}
如果我理解你的话,你可能需要在序列化之前检查 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;
}
}
请告诉我这是否是您正在寻找的。如果没有请提供更多说明