【发布时间】:2020-06-19 20:26:47
【问题描述】:
我了解这个错误是什么,但我无法确定是我的代码的哪一部分导致了它。
我如何识别和理解我的代码的哪一部分导致了这种情况?
我创建了一些非常基本的单元测试来验证我的 fromJson/jsonDecode 和 toJson/jsonEncode 函数,并且在使用嵌套类/列表时,除了 fromJson 之外,一切都按我的意愿工作。
使用toJson/jsonEncode时,我能够成功生成如下字符串
{"id":1,"title":"The Hits","songList":[{"id":1,"title":"hello","artist":"me","lyrics":"say stuff","genre":"rock","rank":10,"created":"2020-04-06T22:00:00.000"},{"id":2,"title":"howdy","artist":"you","lyrics":"say no","genre":"hillBilly","rank":9,"created":"2019-04-06T22:00:00.000"},{"id":3,"title":"Ola","artist":"we","lyrics":"say nothing","genre":"Flapp","rank":2,"created":"2018-04-06T22:00:00.000"}],"created":"2018-04-06T22:00:00.000"}
我不明白为什么 fromJson/Decode 因转换错误而失败。
单元测试
test('Create Setlist including songList from complex json', (){
Setlist complexSet = Setlist.fromJson(jsonDecode(complexObjectJson));
print(complexSet);
});
这是来自 Setlist 类的 Setlist.fromJson 工厂方法
factory Setlist.fromJson(dynamic json) {
if (json['songList'] != null) {
var songObjsJson = json['songList'] as List;
List<Song> _songs = songObjsJson.map((songJson) => Song.fromJson(songJson)).toList();
return Setlist(
id: json['id'] as int,
title: json['title'] as String,
songList: _songs,
created: ['created'] as String,
);
} else {
return Setlist(
id: json['id'] as int,
title: json['title'] as String,
created: ['created'] as String,
);
}
}
歌曲课
class Song {
final int id;
final String title;
final String artist;
final String lyrics;
final String genre;
final int rank;
final String created;
Song(
{this.id,
this.title,
this.artist,
this.lyrics,
this.genre,
this.rank,
this.created});
Map toJson() => {
'id': id,
'title': title,
'artist': artist,
'lyrics': lyrics,
'genre': genre,
'rank': rank,
'created': created,
};
factory Song.fromJson(dynamic json) {
return Song(
id: json['id'] as int,
title: json['title'] as String,
artist: json['artist'] as String,
lyrics: json['lyrics'] as String,
genre: json['genre'] as String,
rank: json['rank'] as int,
created: json['created'] as String);
}
@override
String toString() {
return 'Song{id: $id, '
'title: $title, '
'artist: $artist, '
'lyrics: $lyrics, '
'genre: $genre, '
'rank: $rank, '
'created: $created}';
}
}
【问题讨论】:
-
你能从堆栈跟踪中检查哪一行导致错误吗?