Kotlin Data Class from Json using GSON Kotlin Data Class from Json using GSON java java

Kotlin Data Class from Json using GSON


Data class:

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

to JSON:

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

from JSON:

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


Based on answer of Anton Golovin

Details

  • Gson version: 2.8.5
  • Android Studio 3.1.4
  • Kotlin version: 1.2.60

Solution

Create any class data and inherit JSONConvertable interface

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

Usage

Data class

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

From JSON

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

To JSON

val json = object.toJSON()


You can use similar in Kotlin class

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}

And also for nested class you can use same like if there is nested object. Just provide Serialize name for the Class.

@Entity(tableName = "location")class Location {    @SerializedName("rows")    var rows: List<Row>? = null    @SerializedName("totalRows")    var totalRows: Long? = null}

so if get response from the server each key will map with JOSN.

Alos, convert List to JSON:

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

ndroid convert from JSON to Object:

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