我在我的類中使用了一個私有建構式,但是代碼生成失敗了
該類
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);
}
我究竟做錯了什么?
uj5u.com熱心網友回復:
你可以使用@JsonSerializable(constructor: '_')里面介紹4.2.0-dev的JsonSerializable。
這將允許您在創建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);
}
現在在這里,不要fromJson像這樣_$Foo._FromJson(json)使用,而是將其用作_$FooFromJson(json)
uj5u.com熱心網友回復:
由于您使用 宣告了建構式_,因此您的類沒有默認建構式。要解決您的問題,請洗掉_.
@JsonSerializable()
class Foo {
final int count;
const Foo(this.count);
factory Foo.fromJson(Map<String, dynamic> json) => _$Foo._FromJson(json);
}
uj5u.com熱心網友回復:
如果你需要json_serializable: generate 是給你的,你必須定義默認的建構式。但你可以使用這個技巧:
首先執行此操作并運行 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 并呼叫 Private 建構式:
Foo _$FooFromJson(Map<String, dynamic> json) => Foo._(
json['count'] as int,
);
Map<String, dynamic> _$FooToJson(Foo instance) => <String, dynamic>{
'count': instance.count,
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450895.html
