我在类中使用了一个私有构造函数,但的代码生成失败
类
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: '_')
,它是在JsonSerializable
的4.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,
};