如何使用json_serializable从json序列化中排除单个字段?

时间:2020-01-15 16:46:43

标签: flutter dart

我使用https://pub.dev/packages/json_serializable为类生成Json序列化。这很好。现在我只想为json生成忽略一个字段,而不是在读取json时忽略例如以下示例中的dateOfBirth:

@JsonSerializable()
class Person {
  final String firstName;
  final String lastName;
  final DateTime dateOfBirth; //<-- ignore this field for json serialization but not for deserialization
  Person({this.firstName, this.lastName, this.dateOfBirth});
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

当我使用JsonKey.ignore时,toJsonfromJson的字段将被忽略。

我缺少这种情况下的JsonKey注释吗?

2 个答案:

答案 0 :(得分:3)

使用空安全,它可以是:

@JsonKey(ignore: true)
final String documentID;

答案 1 :(得分:1)

这是我一直在使用的一种解决方法,因此我不会最终在我的FB数据库中存储两次documentID,同时仍然可以在对象上使用它们:

@JsonSerializable()
class Exercise {
  const Exercise({
    @required this.documentID,
    // ...
  })  : assert(documentID != null);

  @JsonKey(toJson: toNull, includeIfNull: false)
  final String documentID;

  //...

  factory Exercise.fromJson(Map<String, dynamic> json) =>
      _$ExerciseFromJson(json);
  Map<String, dynamic> toJson() => _$ExerciseToJson(this);
}

toNull只是

toNull(_) => null;

toJson将使该值无效,然后includeIfNull不会序列化该值。