【发布时间】:2019-07-03 21:28:25
【问题描述】:
我有一个 .net 服务器 Web api 调用,我试图将客户端部分从 Xamarin 移植到 Flutter。除了 json 序列化/反序列化很痛苦之外,flutter/Dart 给我留下了深刻的印象!我的 api 返回一个包含嵌入式机器列表的锻炼程序列表。这是非常简单和正常的东西。我生成的 JSON 看起来像:
[
{"id":1,"
Name":"back",
"userid":1,
"cloned":0,
"Machines":
[
{"machineid":2,
"Name":"Leg Extension","PictureUrl":"https://l},
{"machineid":3,"Name":"yoga ball","PictureUrl":"https://
}
我最初尝试使用 dart.convert 的手动方法,这对我序列化例程列表很有用。但是,当我调用 jsonDecode 时,我决定使用here 我的代码通过以下异常描述的代码生成:
类型“列表”不是类型“地图”的子类型
我的 Flutter UI 代码如下:
_fetchData() async {
setState(() {
isLoading = true;
});
final response =
await http.get("http://fitnesspal.azurewebsites.net/api/routines");
if (response.statusCode == 200) {
// list = (json.decode(response.body) as List)
// .map((data) => new Routine.fromJson(data))
// .toList();
// final jsonResponse = json.decode(response.body);
try {
String json1 = response.body;
Map map1 = jsonDecode(json1);
var test = Routine.fromJson(map1);
}
catch (e) {
print(e.toString());
}
setState(() {
isLoading = false;
});
} else {
throw Exception('Failed to load photos');
}
}
import 'package:json_annotation/json_annotation.dart';
import 'package:fitnesspal/Models/Machine.dart';
part 'Routine.g.dart';
@JsonSerializable(nullable: false)
class Routine{
final int id;
final String name;
@JsonKey(name: 'Machines')
List<Machine> Machines;
Routine({this.id,this.name,this.Machines});
factory Routine.fromJson(Map<String, dynamic> json) =>
_$RoutineFromJson(json);
Map<String, dynamic> toJson() => _$RoutineToJson(this);
}
我遵循了所描述的代码生成步骤
【问题讨论】:
标签: serialization dart flutter