Kotlin
A concise multiplatform language developed by JetBrains
kotlinx.serialization 1.2发布,JSON的高性能解析,值类的支持,文档的翻修等等
kotlinx.serialization
1.2已发布!我们跨平台序列化库的最新版本带来了多个改进——下面是重点:-
JSON序列化速度远超以往。在1.2版本将JSON解析为类型安全的Kotlin对象和将Kotlin对象解析为文本形式时,其速度是以前版本的两倍。
-
现已支持Kotlin 1.5的类型系统。值类和无符号数可以像其他Kotlin类一样转换为JSON并返回。
-
新的API文档让查找
kotlinx.serialization
提供的所有功能更加容易。
1.2版还新增对 JSON 字段候选名称的支持,以及提供了一种新的实验方案,可以自动从 Kotlin 类中生成 Protobuf 的 schema,为此,我们期待您的反馈!
开始使用 kotlinx.serialization 1.2!
远超以往的 JSON 编解码
kotlinx.serialization
最常用的功能是将 Kotlin 类编码为 JSON 字符串,以及将 JSON 字符串转换为 Kotlin 类,并且我们一直在努力提高其性能。
kotlinx.serialization
的内部结构,从而使核心功能的性能大大提高。我们已经重写了 JSON 解码器(负责将文本转换为 Kotlin 对象),以及对 JSON 编码器(负责将 Kotlin 对象转换为文本) 进行了深度优化。kotlinx.serialization
达到(某些方面超越)了其他开箱即用的JSON 库相同的性能。哪怕是最简单的代码块也可以从该调整中受益:kotlinx.serialization
的新旧版本。值类和无符号数字类型的稳定JSON(反)序列化
对值类的支持
kotlinx.serialization
内置的JSON序列化现在可用于值类。就像其他Kotlin类一样,我们只需用@Serializable
注释值类
。数据类
中添加类型为值类
的字段,并观察其输出来了解情况:NamedColor
将值类
Color
视为基础类型( Int
)。这意味着您可以最大程度享受Kotlin代码的类型安全性,同时仍能从类型序列化的简便中得益,而避免了不必要的装箱或嵌套。对无符号整型的支持
-
UByte
,其值范围从 0 到 255 -
UShort
,其值范围从 0 到 65535 -
UInt
,其值范围从 0 到 2^32 – 1 -
ULong
,其值范围从 0 到 2^64 – 1
kotlinx.serialization
的JSON编解码器直接支持这些类型。就像其他数字类型一样,无符号整型会以其纯数字形式(和调用.toString
输出一致)进行序列化,而不会被截断,换行或转换为带符号类型。如果您想紧跟最新版本的kotlinx.serialization
和Kotlin编程语言,请通过该博客旁边的表格订阅Kotlin产品更新资讯。
有关更多kotlinx.serialization
中使用值类和无符号类型的详细信息,请查看GitHub上的文档。
JSON 字段的支持候选名称
@JsonNames
注解,您现在可以为JSON字段指定候选名称,这些名称会在解析过程用到。name
和title
的意义相同,我们希望将它们映射到Kotlin类中的同一字段。通过新的@JsonNames
注解,我们可以指定title
为name
键的候选值:请注意与@SerialName
注解的不同在于,这个注解(<0>@SerialName)允许您编解码时重命名字段,但不允许您指定候选值。
请注意与@SerialName
注解的不同在于,这个注解(<0>@SerialName)允许您编解码时重命名字段,但不允许您指定候选值。
新的API文档
kotlinx.serialization
的过程舒适而有趣,我们试着提供了大量参考资料。其一是GitHub上的 Kotlin 序列化指南,当中提供了库功能的演示,并包括单独的示例,以便您能直观地了解每个功能。探索新的 kotlinx.serialization API 文档!
Protobuf: 从 Kotlin 类中生成 schema(试验中)
Protocol Buffers(Protobuf) 是Google创建的二进制序列化数据结构。 作为二进制格式,它比JSON或XML更节省空间,同时其结构与语言无关,您可以将其用于应用程序到应用程序间的通信。
kotlinx.serialization
,您可以使用实验中的稳定多平台 Protobuf 序列化(使用 proto2 语义)。与其他格式一样,用@Serializable
注解您的类,并调用内置的encode
/decode
方法:将您的Kotlin类作为明确的来源(以及您可能用到的定制化), kotlinx.serialization
能够推断出数据二进制的schema,让Protobuf在多个Kotlin应用程序之间的通信简洁且方便。
kotlinx.serialization
1.2现在还包含试验性质的用于Protocol Buffers的schema生成器。它允许您从Kotlin数据类生成.proto
文件,这些文件又可用于生成其他语言(包括Python,C ++和TypeScript)的传输schema形式。有关开始使用新的 schema 生成器的说明,请参阅文档中的相应说明。
.proto
文件后,您可以将其存储在仓库中,并通过它来生成Kotlin类在其他语言的表示形式。我们希望能让您更轻松地将kotlinx.serialization
集成的Protobuf应用到多语言应用程序中,而无需丧失在Kotlin源码中直接管理schemas的便利。.proto
文件,以及遇到的所有问题和期待的功能 。kotlinx.serialization
的 protobuf 实现来序列化 Kotlin 类,则 schema 生成器同样支持它。这也意味着限制同样适用。需要注意以下几点:-
Kotlin的类和属性名需要符合protobuf规范,并且不得包含非法字符。
-
Kotlin的可空性没有反映在schema中(因为proto2没有语义)。根据Kotlin的属性是否定义了默认值,使用protocol buffers提供的可选字段。
-
Kotlin默认值未包含在schema中。(这意味着您必须确保不同语言实现中默认值设置的一致性。)
开始使用 kotlinx.serialization 1.2!
kotlinx.serialization
了,那么很快捷就能升级到1.2版本(而如果您以前没有尝试过kotlinx.serialization
,那么现在开始是个不错的选择!)。首先,更新您build.gradle.kts
文件中的plugins
块:然后,更新您的dependencies
和运行时库,包括您要在应用程序中使用的格式:
更多的观看及阅读材料
如果您遇到任何问题
-
向GitHub问题跟踪器报告问题。
-
在Kotlin Slack上的#serialization频道中寻求帮助(获得邀请)。
订阅 Kotlin 的 YouTube! Happy (de)serializing!