我有一个JSON字符串并使用GSON来创建它的对象。 但是,似乎有一个错误,因为gson不知道List应该是一个乘客列表。但我似乎无法使其发挥作用。 我必须告诉GSON它应该检索包含乘客的Walkin。
public static void main(String[] args) {
String json = "{'price':278,'id':1459465,'passengers':[{'type':'student','price':99},{'type':'student','price':179}]}";
Gson gson = new Gson();
WalkIn walkinRequest = gson.fromJson(json, WalkIn.class);
//I have also tried WalkIn walkinRequest = gson.fromJson(json, new TypeToken<WalkIn>(){}.getType());
System.out.println("price: " + walkinRequest.price);
System.out.println("id: " + walkinRequest.id);
Passenger p = (Passenger) walkinRequest.passengers.get(0); //Error
PassengerOne p1 = (PassengerOne) p;
System.out.println("Passenger - Type: " + p1.type + " price: " + p1.price);
}
static class WalkIn {
int price;
int id;
List passengers;
}
static interface Passenger {
public List getContent();
}
static class PassengerOne implements Passenger{
String type;
int price;
public List getContent() {
List list = new ArrayList();
list.add(type);
list.add(price);
return list;
}
}
static class PassengerTwo implements Passenger{
String name;
int age;
public List getContent() {
List list = new ArrayList();
list.add(name);
list.add(age);
return list;
}
}
输出结果为:
price: 278
id: 1459465
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to testpack.GsonJson$Passenger
at testpack.GsonJson.main(GsonJson.java:35)
我不能把
List<Passenger>
在Walkin中而不是List,因为我在Walkin中使用不同类型的Passenger对象。取决于我想要使用的内容。
答案 0 :(得分:0)
只需使用&#39; Passenger&#39; class为Gson数组而不是List,请参阅下面的
import com.google.gson.annotations.SerializedName;
static class WalkIn {
@SerializedName("price")
int price;
@SerializedName("id")
int id;
@SerializedName("passengers")
Passenger[] passenger_list ;
}
static class Passenger {
@SerializedName("type")
String type;
@SerializedName("price")
int price;
}