使用 GSON 的 Json 中的 Kotlin Data Class

2022-08-31 08:06:28

我有像这样的Java POJO类:

class Topic {
    @SerializedName("id")
    long id;
    @SerializedName("name")
    String name;
}

我有一个像这样的Kotlin数据类

 data class Topic(val id: Long, val name: String)

如何在java变量中提供像任何变量的注释?json keykotlin data class@SerializedName


答案 1

数据类:

data class Topic(
  @SerializedName("id") val id: Long, 
  @SerializedName("name") val name: String, 
  @SerializedName("image") val image: String,
  @SerializedName("description") val description: String
)

到 JSON:

val gson = Gson()
val json = gson.toJson(topic)

从 JSON:

val json = getJson()
val topic = gson.fromJson(json, Topic::class.java)

答案 2

基于安东·戈洛文的回答

  • Gson 版本: 2.8.5
  • 安卓工作室 3.1.4
  • Kotlin 版本: 1.2.60

溶液

创建任何类数据并继承 JSON 可转换接口

interface JSONConvertable {
     fun toJSON(): String = Gson().toJson(this)
}

inline fun <reified T: JSONConvertable> String.toObject(): T = Gson().fromJson(this, T::class.java)

用法

数据类

data class User(
    @SerializedName("id") val id: Int,
    @SerializedName("email") val email: String,
    @SerializedName("authentication_token") val authenticationToken: String) : JSONConvertable

从 JSON

val json = "..."
val object = json.toObject<User>()

到 JSON

val json = object.toJSON()