這是我發現的一個新問題,想知道是否有其他人遇到過。最近在我的具有列舉欄位的類中,當我使用 toJson() 方法時,任何為 null 的列舉都會在映射中產生 null,即使它們應該被忽略。例如:
import 'package:freezed_annotation/freezed_annotation.dart';
part 'temp.freezed.dart';
part 'temp.g.dart';
enum YesNo { yes, no }
@freezed
class Temp1 with _$Temp1 {
Temp1._();
factory Temp1({
String? name,
YesNo? yesno,
}) = _Temp1;
factory Temp1.fromJson(Map<String, dynamic> json) => _$Temp1FromJson(json);
}
@JsonSerializable(includeIfNull: false)
class Temp2 {
Temp2({
this.name,
this.yesno,
});
String? name;
YesNo? yesno;
factory Temp2.fromJson(Map<String, dynamic> json) => _$Temp2FromJson(json);
Map<String, dynamic> toJson() => _$Temp2ToJson(this);
}
如果我再運行這個:
import 'temp.dart';
void main() {
final temp1 = Temp1(yesno: YesNo.no);
final temp2 = Temp2(yesno: YesNo.yes);
print(temp1.toJson());
print(temp2.toJson());
}
我得到:
{yesno: null}
{yesno: null}
我也嘗試過包含一個 build.yaml 檔案
targets:
$default:
builders:
json_serializable:
options:
# Options configure how source code is generated for every
# `@JsonSerializable`-annotated class in the package.
#
# The default value for each is listed.
any_map: false
checked: false
create_factory: true
create_to_json: true
disallow_unrecognized_keys: false
explicit_to_json: true
field_rename: none
ignore_unannotated: false
include_if_null: false
結果相同。我想這可能是凍結或 json_serializable 的問題,但是使用舊版本的包我得到了同樣的問題。但是,這絕對是一個代碼生成問題。如果我查看從上述檔案生成的 temp.g.dart,我會看到:
Map<String, dynamic> _$Temp2ToJson(Temp2 instance) {
final val = <String, dynamic>{};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('name', instance.name);
val['yesno'] = _$YesNoEnumMap[instance.yesno];
return val;
}
以前它會給我類似的東西:
Map<String, dynamic> _$Temp2ToJson(Temp2 instance) {
final val = <String, dynamic>{};
void writeNotNull(String key, dynamic value) {
if (value != null) {
val[key] = value;
}
}
writeNotNull('name', instance.name);
writeNotNull('yesno', _$YesNoEnumMap[instance.yesno];
return val;
}
還有其他人遇到這個問題嗎?
uj5u.com熱心網友回復:
你做的事情是正確的。有一個拉取請求來解決這個問題,它似乎很快就會上線。只是未通過的最終測驗(檢查干凈合并):
https://github.com/google/json_serializable.dart/pull/1223
https://github.com/google/json_serializable.dart/commit/5107ac1df814527853ab65686dced776335bf498
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517199.html
標籤:json扑镖枚举可序列化 json