Просто начать работу с пакетом json_serializable (и Dart в целом). Я столкнулся с проблемой, когда моя простая сущность взрывается при попытке инициализировать ее с JSON. Возвращенная ошибка trying to assign a List<dynamic> to a List<Asset>
.
test('Test AssetSearch Response Handling', () {
String json = """{"recordsTotal":0,"recordsFiltered":0,"data":[{
"assetType": "ASSET",
"description": "A Case of Surgical Masks",
"partNumber": "PN183289283",
"serialNumber": "SN123"
}]}""";
AssetSearchResult result = AssetSearchResult.fromJson(jsonDecode(json));
expect(result.recordsTotal, equals(0));
print("data returned was ${result.data}");
expect(result.data.isEmpty, equals(true));
});
Класс Asset выглядит следующим образом:
@JsonSerializable()
class AssetSearchResult {
int recordsTotal;
int recordsFiltered;
List<Asset> data;
Map<String, dynamic> toJson() => _$AssetSearchResultToJson(this);
static fromJson(Map<String, dynamic> json) => _$AssetSearchResultFromJson(json);
}
... и, наконец, сгенерированный код из json_serializer:
AssetSearchResult _$AssetSearchResultFromJson(Map<String, dynamic> json) {
return AssetSearchResult()
..recordsTotal = json['recordsTotal'] as int
..recordsFiltered = json['recordsFiltered'] as int
..data = (json['data'] as List) // <== This is where things blow up...
?.map(
(e) => e == null ? null : Asset.fromJson(e as Map<String, dynamic>))
?.toList();
Если я изменю сгенерированный код, чтобы обернуть его в правильный тип списка, все работает отлично.
..data = List<Asset>.from((json['data'] as List)
?.map(
(e) => e == null ? null : Asset.fromJson(e as Map<String, dynamic>)));
Я не уверен, как это исправить с помощью аннотаций или в не сгенерированной части сущности, поскольку исправление находится внутри класса .g.dart.