Освоение сериализации JSON во Flutter с помощью Build Runner

Во Flutter сериализация JSON — обычная задача при работе с API и сохранением данных. Пакет json_serializableв сочетании с инструментом build_runnerпредоставляет мощный и эффективный способ автоматического создания необходимого кода сериализации. В этой статье мы рассмотрим различные методы выполнения сериализации JSON во Flutter с использованием пакетов build_runnerи json_serializable.

Методы сериализации JSON во Flutter:

  1. Ручная сериализация.
    Самый простой подход — вручную написать код сериализации и десериализации для каждой модели данных. Этот метод требует реализации методов toJson()и fromJson()для каждого класса. Вот пример:
class Person {
  String name;
  int age;
  Person(this.name, this.age);
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
  factory Person.fromJson(Map<String, dynamic> json) {
    return Person(json['name'], json['age']);
  }
}
    Пакет

  1. json_serializable.
    Пакет json_serializableупрощает процесс создания стандартного кода сериализации. Чтобы использовать этот пакет, добавьте json_serializableи build_runnerв файл pubspec.yamlи запустите процесс сборки. Вот пример:
import 'package:json_annotation/json_annotation.dart';
part 'person.g.dart';
@JsonSerializable()
class Person {
  String name;
  int age;
  Person(this.name, this.age);
  factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}
  1. Аннотации и средство выполнения сборки.
    Используя аннотации, вы можете дополнительно настроить процесс сериализации. Например, вы можете указать имена полей, исключить поля или указать значения по умолчанию. Вот пример:
import 'package:json_annotation/json_annotation.dart';
part 'person.g.dart';
@JsonSerializable()
class Person {
  @JsonKey(name: 'full_name')
  String name;
  @JsonKey(defaultValue: 18)
  int age;
  Person(this.name, this.age);
  factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}
  1. Обработка вложенных объектов.
    Сериализация JSON становится более сложной при работе с вложенными объектами. Пакет json_serializableподдерживает вложенные объекты, добавляя к вложенному классу аннотацию @JsonSerializable()и используя аннотацию @JsonKeyдля указания имени поля. Вот пример:
import 'package:json_annotation/json_annotation.dart';
part 'person.g.dart';
@JsonSerializable()
class Person {
  String name;
  int age;
  Address address;
  Person(this.name, this.age, this.address);
  factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}
@JsonSerializable()
class Address {
  String street;
  String city;
  Address(this.street, this.city);
  factory Address.fromJson(Map<String, dynamic> json) =>
      _$AddressFromJson(json);
  Map<String, dynamic> toJson() => _$AddressToJson(this);
}

В этой статье мы рассмотрели различные методы сериализации JSON во Flutter с использованием пакета json_serializableи инструмента build_runner. Мы обсудили сериализацию вручную, использование пакета json_serializableи обработку вложенных объектов. Используя эти методы, вы можете эффективно сериализовать и десериализовать данные JSON в своих приложениях Flutter.

Освоив сериализацию JSON с помощью Build Runner, вы сможете оптимизировать процесс разработки и повысить производительность своих приложений Flutter.