kotlinx.serialization:如何解析为与 JSON 键的确切名称不同的变量名称

erl*_*man 6 android json gson kotlin kotlinx.serialization

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

data class User (
    @SerializedName("id")
    long userId;
    @SerializedName("fullName")
    String name;
)
Run Code Online (Sandbox Code Playgroud)

kotlinx.serialization我们可以序列化这样的,但如何让在不同的JSON关键,varaible对象(德)序列化

@Serializable
data class User (
    long userId;
    String name;
)
Run Code Online (Sandbox Code Playgroud)

erl*_*man 15

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

GSON

data class User (
    @SerializedName("id")
    long userId;
    @SerializedName("fullName")
    String name;
)
Run Code Online (Sandbox Code Playgroud)

kotlinx. 序列化

@Serializable
data class User (
    @SerialName("id")
    long userId;
    @SerialName("fullName")
    String name;
)
Run Code Online (Sandbox Code Playgroud)


abh*_*bhi 5

根据文档:

默认情况下,编码表示(示例中的 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))
}
Run Code Online (Sandbox Code Playgroud)