user.dart

import 'package:example/models/contact.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart'; // the `user` is the fileName

@JsonEnum(valueField: "value")
enum Gender {
  male("m"),
  female("f");

  const Gender(this.value);
  final String value;
}

@JsonSerializable(fieldRename: FieldRename.screamingSnake)
class User {
  User({
    required this.name,
    required this.dateOfBirth,
    required this.gender,
    required this.contact,
    required this.presentAddress,
  });

  final String name;
  final Gender gender;
  @JsonKey(name: "dob")
  final DateTime? dateOfBirth;

  final Contact contact;

  final String presentAddress;

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

Custom Converter

class DateTimeConverter
    implements JsonConverter<DateTime?, Map<String, dynamic>?> {
  const DateTimeConverter();

  @override
  DateTime? fromJson(Map<String, dynamic>? json) {
    if (json == null) return null;
    final second = json["seconds"];
    return DateTime.fromMillisecondsSinceEpoch(second);
  }

  @override
  Map<String, dynamic>? toJson(DateTime? object) {
    if (object == null) return null;
    return {'seconds': (object.millisecondsSinceEpoch / 1000).round()};
  }
}

Custom config 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
          constructor: ""
          create_factory: true
          create_field_map: false
          create_json_keys: false
          create_json_schema: true
          create_per_field_to_json: false
          create_to_json: true
          date_time_utc: true
          disallow_unrecognized_keys: false
          explicit_to_json: false
          field_rename: snake
          generic_argument_factories: false
          ignore_unannotated: false
          include_if_null: true
json_serializable on pub.dev↗