Skip to content

Instantly share code, notes, and snippets.

@adfleshner
Last active March 14, 2023 06:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adfleshner/8ad443b52a45c7ce0a61b703d639b880 to your computer and use it in GitHub Desktop.
Save adfleshner/8ad443b52a45c7ce0a61b703d639b880 to your computer and use it in GitHub Desktop.
Gson Kotlin Extensions. I created a few simple extensions for gson to Simplfy any Gson needs.
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
val gson: Gson = GsonBuilder().create()
val gsonPretty: Gson = GsonBuilder().setPrettyPrinting().create()
inline fun <reified T> T.toJson(prettyPrint : Boolean = false) :String{
return if(prettyPrint){
gsonPretty
}else {
gson
}.toJson(this)
}
inline fun <reified T> String.fromJson() : T {
return gson.fromJson(this,T::class.java)
}
inline fun <reified T> String.fromListJson() : List<T> {
val listType = object: TypeToken<List<T>>(){}.type
return gson.fromJson(this, listType)
}
data class User(val name :String, val username: String)
import org.junit.Test
class GsonTest {
@Test
fun `Gson toJson extension works`(){
val user = User("Aaron","adfleshner")
val actual = user.toJson()
println(actual)
assert(actual is String)
}
@Test
fun `Gson toJson list extension works`(){
val user = listOf(User("Aaron","adfleshner"))
val actual = user.toJson()
println(actual)
assert(actual is String)
}
@Test
fun `Gson fromJson extension works`(){
val str = "{\"name\":\"Aaron\",\"username\":\"adfleshner\"}"
val user = str.fromJson<User>()
assert(user is User)
}
@Test
fun `Gson fromListJson extension works`(){
val str = "[{\"name\":\"Aaron\",\"username\":\"adfleshner\"}]"
val users = str.fromListJson<User>()
assert(users is List<User>)
}
}
@adfleshner
Copy link
Author

adfleshner commented Mar 14, 2023

implementation 'com.google.code.gson:gson:2.10.1'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment