I have a JSON-string and use GSON to create objects of it. However, there appears to be an error because gson does not know List is supposed to be a list of Passengers. But I can not seem to make it work. I must tell GSON that it should retrieve Walkin containing Passengers.
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;
}
}
The output is:
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)
I can not put
List<Passenger>
inside Walkin instead of List, because I use different types of Passenger objects in Walkin. Depends on what I want to use.