json - 将对象转换为可编码对象失败

标签 json serialization dart encode

我收到以下错误:

Converting object to an encodable object failed: Instance of 'Patient'
#0      _JsonStringifier.writeObject (dart:convert/json.dart:674)
#1      _JsonStringifier.writeList (dart:convert/json.dart:724)
#2      _JsonStringifier.writeJsonValue (dart:convert/json.dart:706)
#3      _JsonStringifier.writeObject (dart:convert/json.dart:664)
#4      _JsonStringStringifier.printOn (dart:convert/json.dart:873)
#5      _JsonStringStringifier.stringify (dart:convert/json.dart:855)
#6      JsonEncoder.convert (dart:convert/json.dart:256)
#7      JsonCodec.encode (dart:convert/json.dart:155)
#8      Persistence.saveLatestPatients (/Users/dean/Library/Developer/CoreSimulator/Devices/570CC18D-95BF-4062-8523-9C78E106D0CF/data/Containers/Data/Application/70CAEFAA-4AE3-4CBF-A85F-39161E472C83/tmp/flutter_prototypev6jYbr/flutter_prototype/lib/utils/persistence.dart:32:23)
<asynchronous suspension>
#9      _HomeScreenState.fetchData.<anonymous closure> (/Users/dean/Librar<…>

我的“病人”课:
import 'package:simple_moment/simple_moment.dart';

class Patient {
  String guid;
  String _name;
  String _surname;
  DateTime _updated;

  Patient(String guid) {
    this.guid = guid;
  }

  String get name => _name;
  set name(v) => _name = v;

  String get surname => _surname;
  set surname(v) => _surname = v;

  DateTime get updated => _updated;
  set updated(v) => _updated = v;

  // Helper functions

  String getFullName() => '$_name $_surname';

  String getRelativeLastUpdated() {
    var moment = new Moment.now();
    return moment.from(_updated);
  }

}

最佳答案

您不能只是将任意类实例转换为 JSON。
一种选择是为 JsonEncoder() 构造函数提供自定义函数(通过 toEncodable 参数)。这个自定义函数应该将您的自定义对象映射到 JsonEncoder 已经知道如何处理的类型(即数字、字符串、 bool 值、空值、列表和带有字符串键的映射)。
https://api.dartlang.org/stable/1.24.3/dart-convert/JsonEncoder-class.html
https://pub.dartlang.org/packages/json_serializable是一个为此生成代码的包,因此您无需手动编写它。
另见 https://flutter.io/json/

关于json - 将对象转换为可编码对象失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753412/

相关文章:

Python 推特流时间线

c# - 如何在 C# 中使用动态和静态键名反序列化 JSON

android - 如何在 Flutter 应用中播放 .mp3 文件?

android - 如何在水平ListView的右边缘添加模糊效果以显示内容较多

dart - Dart 中的全局变量

json - 使用 JQ 替换 JSON 模板中的变量

php - 如何在 symfony2 中将 json 转换为 php 对象?

c# - 使用 Json.Net 反序列化对象数组

delphi - 将任何记录转换为字符串并返回?

arrays - 如何在 Swift 4 中选择要反序列化的 JSON 数组