Kotlin Data Class from Json using GSON

后端 未结 3 2014
梦毁少年i
梦毁少年i 2020-12-12 17:55

I have Java POJO class like this:

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

a

相关标签:
3条回答
  • 2020-12-12 18:32

    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)
    
    0 讨论(0)
  • 2020-12-12 18:35

    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()
    
    0 讨论(0)
  • 2020-12-12 18:36

    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)
    
    0 讨论(0)
提交回复
热议问题