如何委托对 json_serialization 中方法的调用?

How to delegate a call to a method in json_serialization?

我有两个 classes FooBar:

@JsonSerializable()
class Foo {
  final Bar bar;
  Foo(this.bar);

  factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
  Map<String, dynamic> toJson() => _$FooToJson(this);
}

@JsonSerializable()
class Bar {
  final String s;
  Bar(this.s);

  factory Bar.fromJson(Map<String, dynamic> json) => _$BarFromJson(json);
  Map<String, dynamic> toJson() => _$BarToJson(this);
}

生成代码后,我使用:

final bar = Bar('hi');
final foo = Foo(bar);
print(foo.toJson());

上面一行打印

{bar: Instance of 'Bar'}

但我想让它打印出来

{bar: "hi"}

一种方法是重写 Bar class 中的 toString 方法,但我认为在使用 json_serializable 进行代码生成时,这不是一个好方法。我认为我缺少一些微不足道的东西 属性。

要在另一个 class 中使用自定义 class,您需要在目标 class.

中使用 explicitToJson: true
@JsonSerializable(explicitToJson: true)
class Foo {
  final Bar bar;
  Foo(this.bar);

  factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
  Map<String, dynamic> toJson() => _$FooToJson(this);
}