【发布时间】:2013-07-15 09:02:52
【问题描述】:
我有这个 json 数组:
[
{
"id":18,
"city":"הרצליה",
"street":"החושלים 1",
"zipcode":121209,
"state":"IL",
"lat":32.158138,
"lng":34.807838
},
{
"id":19,
"city":"הרצליה",
"street":"אבא אבן 1",
"zipcode":76812,
"state":"IL",
"lat":32.161041,
"lng":34.810410
}
]
我有这个类来保存数据:
public class MapData {
private int id;
private String city;
private String street;
private String state;
private int zipcode;
private double lat;
private double lng;
public MapData(int id, String city, String street, String state,
int zipcode, double lat, double lng) {
this.id = id;
this.city = city;
this.street = street;
this.state = state;
this.zipcode = zipcode;
this.lat = lat;
this.lng = lng;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public int getZipcode() {
return zipcode;
}
public void setZipcode(int zipcode) {
this.zipcode = zipcode;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
}
我正在尝试将 json 转换为 MapData 对象列表:
Type type = new TypeToken<List<MapData>>(){}.getType();
return gson.fromJson(jsonString, type);
但我得到这个错误:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.deliveries.models.MapData
我做错了什么?
【问题讨论】:
-
类型擦除。 Gson 知道他必须反序列化 java.util.List,但不知道应该放入什么对象,所以他使用内部类型。
-
@ŁukaszLech - 但我告诉它它是一个 List
并且根据 Gson 文档这就是这样做的方法?! -
您的方法返回
MapData还是List<MapData>?我怀疑你可能返回了错误的类型。 -
@KevinBowersox - 你说得有道理,它实际上是一个通用方法(在这个例子中被简化了),我传入一个对象类型,而不是一个列表类型
-
@ftom2 查看我刚刚发布的答案。它包含一个带有工作示例的 GIST。我确实去掉了不同的字符集,但我认为这不会导致问题。