颤振:json_serializable 1 => true,0 => false

Posted

技术标签:

【中文标题】颤振:json_serializable 1 => true,0 => false【英文标题】:Flutter: json_serializable 1 => true, 0 => false 【发布时间】:2021-07-10 14:47:12 【问题描述】:

我正在使用 json_serializable 将 Map<dynamic, dynamic> 解析为我的对象。 示例:

@JsonSerializable()
class Todo 
  String title;
  bool done;

  Todo(this.title, this.done);

  factory Todo.fromJson(Map<String, dynamic> json) => _$TodoFromJson(json);

因为我从 api 获得 'done': 1,所以我收到以下错误:

Unhandled Exception: type 'int' is not a subtype of type 'bool' in type cast

如何使用 json_serializable 投射 1 = true0 = false

【问题讨论】:

【参考方案1】:

你可以有自定义转换器(在这个例子中它是intDuration 感谢_durationFromMilliseconds 方法):

https://github.com/google/json_serializable.dart/blob/master/example/lib/example.dart

所以在你的代码中可能是这样的:

@JsonSerializable()
class Todo 
  String title;

  @JsonKey(fromJson: _boolFromInt, toJson: _boolToInt)
  bool done;

  static bool _boolFromInt(int done) => done == 1;

  static int _boolToInt(bool done) => done ? 1 : 0;

  Todo(this.title, this.done);

  factory Todo.fromJson(Map<String, dynamic> json) => _$TodoFromJson(json);

【讨论】:

谢谢!你救了我!这就是我要找的东西!

以上是关于颤振:json_serializable 1 => true,0 => false的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 json_serializable 包运行 android 模拟器时出现 Flutter 编译错误

将 Map 转换为 json 字符串颤振

Dart/Flutter:build_value vs json_serializable

dart 中的 json_serializable 枚举值

在 nullsafety 之后使用带有 json_serializable 的 firestore

Flutter json_serializable 5.0.0 不能与 auto_route 一起使用