Во Flutter сериализация JSON — обычная задача при работе с API и сохранением данных. Пакет json_serializableв сочетании с инструментом build_runnerпредоставляет мощный и эффективный способ автоматического создания необходимого кода сериализации. В этой статье мы рассмотрим различные методы выполнения сериализации JSON во Flutter с использованием пакетов build_runnerи json_serializable.
Методы сериализации JSON во Flutter:
- Ручная сериализация.
Самый простой подход — вручную написать код сериализации и десериализации для каждой модели данных. Этот метод требует реализации методов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']);
}
}
-
Пакет
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);
}
- Аннотации и средство выполнения сборки.
Используя аннотации, вы можете дополнительно настроить процесс сериализации. Например, вы можете указать имена полей, исключить поля или указать значения по умолчанию. Вот пример:
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);
}
- Обработка вложенных объектов.
Сериализация 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.