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

Flutter中json_serializable如何全局设置自定义DateTime转换器

全局替换json_serializable的DateTime转换器

要全局替换json_serializable的默认DateTime转换器,你可以通过项目配置文件+自定义转换器的方式实现,具体步骤如下:

1. 编写自定义DateTime转换器

创建一个继承自JsonConverter的类,实现DateTime与目标序列化类型(通常是String)的双向转换。比如要使用yyyy-MM-dd HH:mm:ss格式:

import 'package:json_annotation/json_annotation.dart';
import 'package:intl/intl.dart';

// 支持非空DateTime的转换器
class CustomDateTimeConverter implements JsonConverter<DateTime, String> {
  const CustomDateTimeConverter();

  @override
  DateTime fromJson(String json) => DateFormat('yyyy-MM-dd HH:mm:ss').parse(json);

  @override
  String toJson(DateTime object) => DateFormat('yyyy-MM-dd HH:mm:ss').format(object);
}

// 可选:支持Nullable DateTime的转换器
class CustomNullableDateTimeConverter implements JsonConverter<DateTime?, String?> {
  const CustomNullableDateTimeConverter();

  @override
  DateTime? fromJson(String? json) => json != null ? DateFormat('yyyy-MM-dd HH:mm:ss').parse(json) : null;

  @override
  String? toJson(DateTime? object) => object != null ? DateFormat('yyyy-MM-dd HH:mm:ss').format(object) : null;
}

2. 配置build.yaml全局生效

在项目根目录创建或修改build.yaml文件,将自定义转换器注册为全局转换器,覆盖默认的DateTime处理逻辑:

targets:
  $default:
    builders:
      json_serializable:
        options:
          # 注册全局转换器,替换为你自己的包路径和类名
          converters:
            - "package:你的项目名/路径/custom_date_time_converter.dart#CustomDateTimeConverter"
            # 如果需要支持Nullable,添加下面这行
            # - "package:你的项目名/路径/custom_date_time_converter.dart#CustomNullableDateTimeConverter"
          # 确保未注解的字段也能被处理(可选,根据你的需求调整)
          ignore_unannotated: false
          explicit_to_json: true

3. 重新生成序列化代码

运行build_runner命令,让配置生效并重新生成代码:

# Dart项目
dart run build_runner build

# Flutter项目
flutter pub run build_runner build

注意事项

  • 局部转换器优先级高于全局:如果某个类上单独指定了@JsonSerializable(converters: [...]),会优先使用局部配置的转换器。
  • 确保build.yaml中的包路径和类名完全正确,否则转换器不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:55:22