JSON SerializationDeserialization with AutoValue and Gson
suggest changeImport in your gradle root file
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Import in your gradle app file
apt 'com.google.auto.value:auto-value:1.2' apt 'com.ryanharter.auto.value:auto-value-gson:0.3.1' provided 'com.jakewharton.auto.value:auto-value-annotations:1.2-update1' provided 'org.glassfish:javax.annotation:10.0-b28'
Create object with autovalue:
@AutoValue public abstract class SignIn { @SerializedName("signin_token") public abstract String signinToken(); public abstract String username(); public static TypeAdapter<SignIn> typeAdapter(Gson gson) { return new AutoValue_SignIn.GsonTypeAdapter(gson); } public static SignIn create(String signin, String username) { return new AutoValue_SignIn(signin, username); } }
Create your Gson converter with your GsonBuilder
Gson gson = new GsonBuilder() .registerTypeAdapterFactory( new AutoValueGsonTypeAdapterFactory()) .create());
Deserialize
String myJsonData = "{ \"signin_token\": \"mySigninToken\", \"username\": \"myUsername\" }"; SignIn signInData = gson.fromJson(myJsonData, Signin.class);
Serialize
Signin myData = SignIn.create("myTokenData", "myUsername"); String myJsonData = gson.toJson(myData);
Using Gson is a great way to simplify Serialization and Deserialization code by using POJO objects. The side effect is that reflection is costly performance wise. That’s why using AutoValue-Gson to generate CustomTypeAdapter will avoid this reflection cost while staying very simple to update when an api change is happening.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents