冻结和 json_serializable:如何使用自定义转换器

问题描述

我想向 this answer 中的冻结类添加自定义转换器。

我用这个代码试过了:

@freezed
class NewsPost with _$NewsPost {
  factory NewsPost({
    @JsonKey(name: "date") @TimestampConverter() DateTime? date,}) = _NewsPost;

  factory NewsPost.fromJson(Map<String,dynamic> json) =>
      _$NewsPostFromJson(json);
}

但是没有用。任何想法都非常受欢迎!

为了您的兴趣,这是我的转换器:

class TimestampConverter implements JsonConverter<DateTime,Timestamp> {
  const TimestampConverter();

  @override
  DateTime fromJson(Timestamp timestamp) {
    return timestamp.toDate();
  }

  @override
  Timestamp toJson(DateTime date) => Timestamp.fromDate(date);
}

谢谢:-)

解决方法

嗯,这不是最优雅的解决方案,但它有效。

@freezed
class NewsPost with _$NewsPost {
  factory NewsPost({
    @JsonKey(
       name: "date",fromJson: dateTimeFromJson,fromJson: dateTimeToJson,) DateTime? date,}) = _NewsPost;

  factory NewsPost.fromJson(Map<String,dynamic> json) =>
      _$NewsPostFromJson(json);
}


DateTime dateTimeFromJson(Timestamp timestamp) {
    return timestamp.toDate();
}

Timestamp dateTimeToJson(DateTime date) => Timestamp.fromDate(date);

我认为这是一个解决方案。使用 JsonConverter 我无法让它工作。