本文介紹了對事先未知的SerializedName使用gson/Retrofit的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我需要從設計糟糕的Web API獲取數據,該API以JSON
object:
的形式返回對象列表
{
"29593": { ..object to parse },
"29594": { ..object to parse },
"29600": { ..object to parse }
}
我需要為此響應創建POJO
,但問題是這些整數正在更改,它們類似于對象ID。我不知道如何從JSON
鍵中提取這些整數,然后在另一個POJO
類中進一步使用內部JSON
對象(我知道鍵具有固定值時的基本Gson
映射)。
這有可能嗎?
推薦答案
解決方案是使用GSON庫中的自定義JsonAnti ializer,下面是一個示例:
public class MyAwesomeDeserializer implements JsonDeserializer<MyModel> {
public MyModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject eJson = json.getAsJsonObject();
Set<String> keys = eJson.keySet();
MyModel myModel = new MyModel();
for (String key: keys) {
JsonObject asJsonObject = eJson.get(key).getAsJsonObject();
ItemOfMyModel itemOfMyModel = context.deserialize(asJsonObject, ItemOfMyModel.class);
myModel.addItemOfMyModel(itemOfMyModel);
}
return myModel;
}
}
并且不要忘記將您的自定義反序列化程序作為類型適配器添加到gson builder:
Gson gson = new GsonBuilder()
.registerTypeAdapter(MyModel.class, new MyAwesomeDeserializer())
.create()
這篇關于對事先未知的SerializedName使用gson/Retrofit的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,