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 中使用的那样使用
data class User (
@SerializedName("id")
long userId;
@SerializedName("fullName")
String name;
)
Run Code Online (Sandbox Code Playgroud)
@Serializable
data class User (
@SerialName("id")
long userId;
@SerialName("fullName")
String name;
)
Run Code Online (Sandbox Code Playgroud)
根据文档:
默认情况下,编码表示(示例中的 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)