如何在json_serializable中使用私有构造函数



我在类中使用了一个私有构造函数,但的代码生成失败

Foo没有默认构造函数。

我使用的是最新的json_serializable:版本,即6.1.5:

@JsonSerializable()
class Foo {
final int count;
Foo._(this.count);
factory Foo.fromJson(Map<String, dynamic> json) => _$Foo._FromJson(json);
}

我做错了什么?

您可以使用@JsonSerializable(constructor: '_'),它是在JsonSerializable4.2.0-dev中引入的。

这将允许您在创建fromJson帮助程序时指定要调用的替代构造函数。

例如:

import 'package:json_annotation/json_annotation.dart';
part 'foo.g.dart';
@JsonSerializable(constructor: '_')
class Foo {
final int count;
Foo._(this.count);
factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
}

现在,不要像_$Foo._FromJson(json)那样使用fromJson,而是将其用作_$FooFromJson(json)

如果您需要json_serializable:生成是为您准备的,您必须定义默认构造函数。但你可以试试这个把戏:

首先执行此操作并运行build_runner:

@JsonSerializable()
class Foo {
final int count;
Foo(this.count);
factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
}

然后将其更改为:

@JsonSerializable()
class Foo {
final int count;
Foo._(this.count);
factory Foo.fromJson(Map<String, dynamic> json) => _$FooFromJson(json);
}

并转到_.g.dart和mack调用私有构造函数:

Foo _$FooFromJson(Map<String, dynamic> json) => Foo._(
json['count'] as int,
);
Map<String, dynamic> _$FooToJson(Foo instance) => <String, dynamic>{
'count': instance.count,
};

相关内容

  • 没有找到相关文章

最新更新