我们在进行 Android 开发时,通常习惯使用著名的 GSON 或 Moshi 库,配合 Retrofit 来解析来自 API 或网络请求的 JSON 数据。但是,对于 Kotlin 项目来说,这种方式正逐渐变得过时,因为 Kotlin 的创造者 JetBrains 发布了 kotlinx.serialization。这是一个 Kotlin 优先的跨平台 JSON 数据序列化库。kotlinx.serialization 完全由纯 Kotlin 编写,可用于所有 Kotlin Multiplatform 目标平台,包括 Kotlin/Native 和 Kotlin/JS。它能让我们轻松地将 JSON 序列化/反序列化为类型安全的 Kotlin 对象,反之亦然。
为什么选择 Kotlin Serialization 库而不是 Moshi 和 Gson:
- 通过代码生成,在运行时性能上比 Gson 和 Moshi(反射模式)更快。
- 使用编译器插件而不是注解处理器,构建速度比 Moshi 更快。
- 与 Gson 相比,对 Kotlin 类型系统有更好的支持,包括对可空类型和默认值的支持。
- 通过使用独立的库模块,支持多种编码格式。
在本文中,我们将看看如何在自己的项目中使用它,配合 Retrofit 库来解析来自 API 或网络请求的 JSON 数据。
添加 Kotlin Serialization 库及用于 Kotlin Serialization 的 Retrofit 转换器:
首先,打开项目级的 build.gradle 文件,在 dependencies 块中添加 Kotlin Serialization 的 classpath:
dependencies {
// Other classpath declarations
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
现在,打开应用级的 build.gradle 文件,在文件顶部的 plugins 块中应用该插件:
plugins {
// Other plugins...
id ‘kotlinx-serialization‘
}
接下来,在 dependencies 块中添加依赖项:
dependencies {
// Other dependencies...
// Kotlinx Serialization dependency
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2"
// Retrofit kotlin-serialzation-converter
// 它允许 Retrofit 使用 Kotlin Serialization 库来转换 API 请求和响应。
implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0"
}
现在,让我们首先看看如何使用 kotlinx.serialization 将 JSON 数据映射到 Kotlin data/pojo 类:
我们以以下 JSON 对象为例,我们将把它转换为 Kotlin data/pojo 类。
{
“course_name”:”Modern Android Development”,
“course_img”:”https://media.geeksforgeeks.org/wp-content/cdn-uploads/20210215201419/Android-Tutorial.png%E2%80%9D,
“courseMode”:”Online Batch”,
“courseTracks”:”8 Tracks”
"is_course_freely_available": true
}
Kotlin Serialization 库会为带有 @Serializable 注解的类生成序列化器。序列化器是一个处理对象序列化和反序列化的类,针对每一个带有 @Serializable 注解的类。而 @SerialName 注解允许你为 Kotlin 对象指定一个自定义名称。因此,如果你不想为 Kotlin 对象使用与 JSON 字段相同的名称……那么请使用 @SerialName("actualjsonfieldnamehere") 注解,将对象映射为与 JSON 字段名称不同的名称。
Kotlin Data class 或 POJO class:
Kotlin
CODEBLOCK_13f7aed6
在上面的代码中,我们已经在 Kotlin data class 中映射了 JSON 数据。
为 Retrofit 创建 JSON 转换器工厂
现在,无论你在哪里构建 Retrofit 实例,都要像这样构建它:
Kotlin
CODEBLOCK_101e657d
上面的代码创建了 kotlinxConverterFactory 对象,作为一个使用 JSON 的转换器工厂,并将其添加到了 Retrofit 实例中。这样 Retrofit 就可以通过 JSON 对象与 API 进行通信。就这样,通过这种方式,你可以轻松地在 Retrofit 中使用 Kotlinx.Serialization 库来代替 GSON & Moshi 解析 JSON 数据。
标签的深度解析...