serialization - flutter 序列化儿子列出对象抛出异常

标签 serialization dart flutter

我有一个 .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 的手动方法,结果对我序列化例程列表很有效。但是后来我决定使用描述的代码生成 here当我调用 jsonDecode 时,我的代码通过以下异常:

类型“List”不是类型“Map”的子类型

我的 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);

}

我遵循了描述的代码生成步骤

最佳答案

这不起作用,因为 json1 是对象的 List,而不是 Map。

 Map map1 = jsonDecode(json1);

尝试使用这个:

List list = jsonDecode(json1);

并获取第一个元素只是为了测试(在真实场景中你将不得不循环列表)

  var test = Routine.fromJson(list[0]);

关于serialization - flutter 序列化儿子列出对象抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612725/

相关文章:

c# - SettingsPropertyValue.SerializedValue 为 null,除非我通过 locals 查看变量

android - 如何在 flutter 中使用列中的文本时消除文本溢出

dart - 如何取消 Future.delayed?

python - 如何使用 Starflut 在 Flutter 中导入 python 包?

android - Flutter - 在 Android 上覆盖插件实现

java - 多重继承序列化保持向后兼容性

c# - JSON.NET - 如何为作为对象类型存储在数组/列表中的原始 C# 类型包含类型名称处理

android - 为什么 futureBuilder 有时会卡在进度加载器上?

flutter - dart - 如何在 Quill 文本编辑器 (Flutter) 中监听文本更改

java - XML 反序列化 java XSTream 问题