9

使用 GSON,我们曾经@SerializedName解析 JSON 对象,该对象与 Kotlin 中的变量名没有相同的键。

data class User (
    @SerializedName("id")
    long userId;
    @SerializedName("fullName")
    String name;
)

我们可以像这样序列化一个对象,但是如何在(反)序列化kotlinx.serialization期间为变量提供不同的 JSON 键?

@Serializable
data class User (
    long userId;
    String name;
)
4

2 回答 2

21

@SerialName像我们@SerializedName在 GSON 中使用的一样使用

GSON

data class User (
    @SerializedName("id")
    long userId;
    @SerializedName("fullName")
    String name;
)

kotlinx.序列化

@Serializable
data class User (
    @SerialName("id")
    long userId;
    @SerialName("fullName")
    String name;
)
于 2020-06-08T02:33:11.650 回答
3

根据文档:

默认情况下,编码表示中使用的属性名称(在我们的示例中为 JSON)与它们在源代码中的名称相同。用于序列化的名称称为序列名称,可以使用@SerialName注解进行更改。例如,我们可以在源代码中有一个带有缩写序列名称的语言属性。

@Serializable
class Project(val name: String, @SerialName("lang") val language: String)

fun main() {
    val data = Project("kotlinx.serialization", "Kotlin")
    println(Json.encodeToString(data))
}
于 2021-10-16T06:16:47.880 回答