我正在Android上處理API請求與Retrofit(1.9.0)和gson庫(1.7.0我與gson版本2.3.1有兼容性問題),我提出了一些要求到一個具有相同的響應格式但在url調用之後有不同內容的API,但是我遇到了一個數組裏面有一個答案的反序列化問題。這是我想反序列化JSON的例子:Retrofit android:gson數組內容反序列化
{
"http_code":200,
"content":[
{
"name":"Groult Christian",
"location":[
48.897655,
2.252462
],
"website":null,
"address":{
"street_address":"XXXXXX",
"city":"XXXXXX",
"state":null,
"postal_code":"XXXXXX",
"country":"XXXXXX"
},
"global_score":0,
"popularity_score":0,
"quality_score":0,
"createdAt":"2015-02-18T02:13:05.068Z",
"updatedAt":"2015-02-18T02:13:05.068Z",
"id":"54e3f531775288ca572872ac"
},
...
]
}
我DeserializerJson,我怎麼稱呼它改造:
public class DeserializerJson<T> implements JsonDeserializer<T> {
@Override
public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException
{
// Get the "content" element from the parsed JSON
JsonElement content = je.getAsJsonObject().get("content");
// Deserialize it. You use a new instance of Gson to avoid infinite recursion
// to this deserializer
return new Gson().fromJson(content, type);
}
}
...
Gson gson = new GsonBuilder()
.registerTypeAdapter(ContentUser.class, new DeserializerJson<ContentUser>())
.registerTypeAdapter(DeviceInfo.class, new DeserializerJson<DeviceInfo>())
.registerTypeAdapter(PlacesModel.class, new DeserializerJson<PlacesModel>())
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.BASIC)
.setConverter(new GsonConverter(gson))
...
...
和我不同的型號:
public class PlacesModel {
@SerializedName("name")
@Expose
private String name;
@SerializedName("location")
@Expose
private List<Double> location = new ArrayList<Double>();
@SerializedName("website")
@Expose
private Object website;
@SerializedName("address")
@Expose
private AddressModel address;
@SerializedName("global_score")
@Expose
private Integer globalScore;
@SerializedName("popularity_score")
@Expose
private Integer popularityScore;
@SerializedName("quality_score")
@Expose
private Integer qualityScore;
@SerializedName("createdAt")
@Expose
private String createdAt;
@SerializedName("updatedAt")
@Expose
private String updatedAt;
@Expose
@SerializedName("id")
private String id;
/* Getters and Setters... */
}
public class AddressModel {
@SerializedName("street_address")
@Expose
private String streetAddress;
@SerializedName("city")
@Expose
private String city;
@SerializedName("state")
@Expose
private Object state;
@SerializedName("postal_code")
private String postalCode;
@SerializedName("country")
@Expose
private String country;
/* Getters and Setters... */
}
URL調用在Api Manager中是這樣的:
@GET("/places")
public void getPlaces(RestCallback<List<PlacesModel>> callback);
但是當我打電話時,我得到這個錯誤:com.google.gson.JsonParseException: The JsonDeserializer [email protected]6 failed to deserialize json object
其他調用的一切都很好我得到的所有內容,所以沒有問題,但有一個數組裏面有內容我有一個錯誤,我不明白爲什麼我相信如果我只是把我的模型列表,它會很好,但它不起作用。 我想我錯過的東西,所以如果有人能幫助我
在此先感謝
這是完整的堆棧跟蹤?如果不是,請在您的問題中發佈完整的堆棧跟蹤。 – iRuth 2015-03-19 07:36:04
是的,它幾乎是完整的堆棧跟蹤,在這個錯誤之後只有我想要反序列化的json – flo3573358 2015-03-19 07:39:56
堆棧跟蹤中是否有行號顯示導致JsonParseException的代碼部分? – iRuth 2015-03-19 07:42:58