使用 AutoValue 和 Gson 進行 JSON SerializationDeserialization
在 gradle 根檔案中匯入
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
匯入你的 gradle app 檔案
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'
使用 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);
}
}
使用 GsonBuilder 建立 Gson 轉換器
Gson gson = new GsonBuilder()
.registerTypeAdapterFactory(
new AutoValueGsonTypeAdapterFactory())
.create());
反序列化
String myJsonData = "{
\"signin_token\": \"mySigninToken\",
\"username\": \"myUsername\" }";
SignIn signInData = gson.fromJson(myJsonData, Signin.class);
連載
Signin myData = SignIn.create("myTokenData", "myUsername");
String myJsonData = gson.toJson(myData);
使用 Gson 是一種通過使用 POJO 物件簡化序列化和反序列化程式碼的好方法。副作用是反射是效能成本高昂的。這就是為什麼使用 AutoValue-Gson 生成 CustomTypeAdapter 將避免這種反射成本,同時在發生 api 更改時保持非常簡單的更新。