128 votes

Kotlin Data Class de Json utilisant GSON

J'ai la classe Java POJO comme ceci:

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

et j'ai une classe de données Kotlin comme celle-ci

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

Comment fournir le json key à toutes les variables de l'annotation kotlin data class comme le @SerializedName dans les variables java?

267voto

Anton Golovin Points 2361

Classe de données:

 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)
 

de JSON:

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

21voto

Vasily Bodnarchuk Points 8047

Basé sur la réponse de Anton Golovin

Détails

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

Solution

Créer toutes les données de la classe et d'héritage JSONConvertable interface

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

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

L'utilisation de la

Classe de données

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

De JSON

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

En JSON

val json = object.toJSON()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X