使用GSON从Json创建Kotlin数据类

oprakyz7  于 2022-11-29  发布在  Kotlin
关注(0)|答案(3)|浏览(181)

我Java POJO类如下所示:

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

我有一个Kotlin数据类

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

如何将json key提供给kotlin data class的任何变量,如java变量中的@SerializedName注解?

cs7cruho

cs7cruho1#

数据类别:

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)
ie3xauqp

ie3xauqp2#

基于Anton Golovin的答案

详细信息

  • Gson版本:2.8.5
  • Android Studio 3.1.4
  • Kotlin版本:1.2.60

溶液

创建任意类数据并继承JSONConvertable接口

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()
tf7tbtn2

tf7tbtn23#

你可以在Kotlin类中使用类似的

class InventoryMoveRequest {
    @SerializedName("userEntryStartDate")
    @Expose
    var userEntryStartDate: String? = null
    @SerializedName("userEntryEndDate")
    @Expose
    var userEntryEndDate: String? = null
    @SerializedName("location")
    @Expose
    var location: Location? = null
    @SerializedName("containers")
    @Expose
    var containers: Containers? = null
}

对于嵌套类,你也可以使用相同的方法,就像如果有嵌套对象一样。只需要为类提供序列化名称。

@Entity(tableName = "location")
class Location {

    @SerializedName("rows")
    var rows: List<Row>? = null
    @SerializedName("totalRows")
    var totalRows: Long? = null

}

因此如果从服务器得到响应,每个键将与JOSNMap。
将List转换为JSON:

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

ndroid从JSON转换为对象:

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

相关问题