You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Freezed中实现带自定义值的toJson方法?

使用Freezed实现自定义JSON转换

Freezed支持通过注解或自定义逻辑处理JSON序列化的自定义需求,针对你要实现的日期格式化、字段转换场景,有两种常用实现方式:

方法一:单个字段自定义(推荐)

直接在字段上用@JsonKey注解指定序列化逻辑,适合单字段的简单转换:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'your_model.freezed.dart';
part 'your_model.g.dart';

@freezed
class YourModel with _$YourModel {
  const factory YourModel({
    // 指定date_installed的序列化格式
    @JsonKey(toJson: _formatDateToYmd) required DateTime dateInstalled,
    @JsonKey(toJson: _formatDateToYmd) required DateTime dateTested,
    // 把updatedAt转为ISO8601字符串
    @JsonKey(toJson: _dateToIsoString) required DateTime updatedAt,
    required List<String> groups,
  }) = _YourModel;

  factory YourModel.fromJson(Map<String, dynamic> json) => _$YourModelFromJson(json);

  // 自定义日期转YYYY-MM-DD格式
  static String _formatDateToYmd(DateTime date) {
    return "${date.year.toString().padLeft(4, '0')}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}";
  }

  // DateTime转ISO8601字符串
  static String _dateToIsoString(DateTime date) => date.toIso8601String();
}

方法二:全局重写toJson方法

如果需要更复杂的全局逻辑,可以扩展Freezed生成的类,手动重写toJson:

// 在模型文件末尾添加扩展
extension YourModelJsonExt on YourModel {
  @override
  Map<String, dynamic> toJson() {
    // 先获取Freezed自动生成的基础JSON结构
    final baseJson = _$YourModelToJson(this);
    // 替换或补充自定义字段
    return {
      ...baseJson,
      "date_installed": "${dateInstalled.year.toString().padLeft(4, '0')}-${dateInstalled.month.toString().padLeft(2, '0')}-${dateInstalled.day.toString().padLeft(2, '0')}",
      "date_tested": "${dateTested.year.toString().padLeft(4, '0')}-${dateTested.month.toString().padLeft(2, '0')}-${dateTested.day.toString().padLeft(2, '0')}",
      "updated_at": updatedAt.toIso8601String(),
    };
  }
}

注意要点

  • 确保已正确配置Freezed代码生成环境(添加freezed_annotation、build_runner等依赖)
  • 如果需要处理反序列化逻辑,可在@JsonKey的fromJson参数中指定对应的转换函数
  • 方法一更贴合Freezed的设计思路,优先推荐;方法二更灵活,适合多字段复杂转换场景

内容的提问来源于stack exchange,提问作者Ogak Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:42:16