У меня есть общая модель данных во Flutter, использующая JsonSerializable. Я хочу передать пользовательское имя параметра (например, "statistics") вместо фиксированного имени в методах fromJson и toJson. Вот моя текущая реализация:
Возможно, мы можем создать еще один параметр, например, имя 'N', и проанализировать его в методах fromJson и toJson. Или, может быть, это вообще невозможно.
import 'package:json_annotation/json_annotation.dart';
part 'data_model.g.dart';
@JsonSerializable(genericArgumentFactories: true)
class DataModel<T, P> {
final int? total;
final List<T> items;
final P? param;
DataModel({
this.total,
required this.items,
this.param,
});
factory DataModel.fromJson(
Map<String, dynamic> json,
T Function(Object?) fromJsonT,
P Function(Object?) fromJsonP,
) {
final List<dynamic> itemsJson = json['items'] as List<dynamic>;
final List<T> items = itemsJson
.map<T>((item) => fromJsonT(item as Map<String, dynamic>))
.toList();
final dynamic paramJson = json['statistics'] as dynamic; // <- pass the param name instead of 'statistics'
final P? pamPam = fromJsonP(paramJson);
return DataModel<T, P>(
total: (json['total'] != null && json['total'] is int)
? json['total'] as int
: null,
param: pamPam,
items: items,
);
}
Map<String, dynamic> toJson(Object? Function(T) toJsonT, Object? Function(P) toJsonP) {
final List<dynamic> itemsJson =
items.map<dynamic>((item) => toJsonT(item)).toList();
return {
'total': total,
'statistics': toJsonP, // <- pass the param name instead of 'statistics'
'items': itemsJson,
};
}
}
Гордей
Вопрос задан21 февраля 2024 г.