JetBrains анонсировала библиотеку kotlinx.serialization 1.2
JetBrains представила библиотеку kotlinx.serialization
1.2! JetBrains внесли ряд улучшений в новую версию мультиплатформенной библиотеки сериализации:
- Cериализация в JSON теперь работает гораздо быстрее. В версии 1.2 парсинг JSON в типобезопасные объекты Kotlin и преобразование объектов Kotlin в их текстовые представления может осуществляться вдвое быстрее.
- Появилась поддержка новых элементов системы типов Kotlin 1.5. Классы значений и числа без знака можно преобразовать в JSON и обратно точно так же, как любой другой класс Kotlin.
- Новая документация API упрощает изучение возможностей
kotlinx.serialization
.
Кроме того, в версии 1.2 добавлена поддержка альтернативных имен полей JSON и реализован новый экспериментальный подход с автоматическим созданием схем Protobuf из классов Kotlin.
Ускоренное кодирование и декодирование JSON
Преобразование классов Kotlin в строки JSON и обратно — одни из самых популярных функций kotlinx.serialization
В версии 1.2 внутренняя структура библиотеки
kotlinx.serialization
была полностью переработана, и в результате производительность двух этих важнейших функций значительно выросла.
Сразу после перехода на новую версию библиотеки скорость выполнения стандартных задач кодирования и декодирования может вырасти вдвое.
Стабильная (де)сериализация в JSON для классов значений и типов чисел без знака
В Kotlin 1.5.0 появились два полезных дополнения: классы значений и типы чисел без знака. Версия kotlinx.serialization
1.2 обеспечивает для них полную поддержку кодирования и декодирования JSON
Поддержка классов значений
Классы значений (раньше они назывались inline-классы) — это способ обертывания объектов Kotlin другого типа (например, чисел) типобезопасным образом и без дополнительной нагрузки при выполнении кода. Таким образом код можно сделать более выразительным и безопасным, не теряя в производительности.
Встроенная в kotlinx.serialization
сериализация в JSON теперь работает и с классами значений. Как и для других классов Kotlin classes, достаточно просто добавить к классу значений
аннотацию @Serializable
.
Поддержка чисел без знака
Числа без знака — это функциональность, добавленная в стандартную библиотеку Kotlin. Они обеспечивают типы и операции с неотрицательными числами. После выхода Kotlin 1.5.0 пользователям доступны следующие типы чисел без знака:
UByte
со значениями от 0 до 255;UShort
со значениями от 0 до 65535;UInt
, со значениями от 0 до 2^32 – 1;ULong
, со значениями от 0 до 2^64 – 1.
Кодер и декодер JSON в библиотеке kotlinx.serialization
теперь по умолчанию поддерживают эти типы. Как и другие типы чисел, значения целых чисел без знака сериализуются в простом числовом представлении (так же, как при вызове .toString
), без обрезки, переноса или преобразования в тип со знаком.
Поддержка альтернативных имен полей JSON
Иногда приходится анализировать поля JSON, имеющие разные имена, но одинаковые значения, например, для обеспечения обратной совместимости. Новая аннотация @JsonNames
позволяет присваивать полям JSON альтернативные имена, которые будут использоваться при декодировании.
Protobuf: экспериментальное создание схем из классов Kotlin
Protocol Buffers (Protobuf) — двоичный формат сериализации структурированных данных, разработанный Google. Естественно, бинарный формат экономичнее, чем JSON или XML, при этом он так же обеспечивает независимую от языка структуру, которую можно использовать для коммуникации между приложениями.
Библиотека kotlinx.serialization
позволяет использовать мультиплатформенную сериализацию Protobuf (с семантикой proto2) в режиме экспериментальной стабильности. Как и при работе с другими форматами, класс можно аннотировать как @Serializable
и использовать встроенные методы encode
/ decode
methods
Используя классы Kotlin как источник истины (вместе с возможными индивидуальными настройками), kotlinx.serialization
может создавать двоичную схему данных, чтобы коммуникация между различными приложениями Kotlin в формате Protobuf была лаконичной и удобной.
Кроме того, kotlinx.serialization
1.2 включает в себя экспериментальный генератор схем для Protocol Buffers. Он позволяет создавать из классов данных Kotlin файлы .proto
, которые затем можно использовать для создания представлений схемы коммуникации в других языках, в том числе Python, C++ и TypeScript.
Инструкции по работе с новым генератором схемы приведены в документации.
После создания файла .proto
его можно сохранить в репозитории и использовать для создания представлений классов Kotlin в других языках.