Сериализация — это процесс сохранения состояния объекта в последовательность байт. Десериализация — это процесс восстановления объекта из этих байт. JSON и XML - самые популярные текстовые форматы для сериализации.
@Serializable - интерфейс-маркер который мы должны имплементировать для сериализации объекта.
transient - ключевое слово используется на полях которые мы не хотим сериализировать/десериализировать(null).
long serialVersionUID - long переменная необходимая для указания версии нашего класса. Она задается автоматически(не рекомендуется) или вручную. Пример мы сделали сериализацию, изменили класс и делаем десереализацию в уже измененный класс - нам вернется исключение java.io.InvalidClassException. Необходимо при изменениях класса не забываем перегенерировать с помощью ide версию класса.
Чтобы не получить ошибку при сериализации все внутренние зависимости объекта должны быть:
Externalizable - наследуется из Serializable и означает ручную настройку сериализация с копированием transient и статических объектов и при правильной настройке оптимизирует сериализацию. Можно без слова transient сериализировать только необходимое.