У меня есть JSON-строка и используйте GSON для создания ее объектов. Однако, похоже, ошибка, потому что gson не знает, что List должен быть списком Пассажиров. Но я не могу заставить его работать. Я должен сказать GSON, что он должен получить Walkin, содержащий пассажиров.GSON от ошибки JSON, когда не найден правильный объект
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 вместо списка, потому что я использую различные типы объектов в пассажирских Walkin. В зависимости от того, что я хочу использовать.
никогда не использовал GSON, но, возможно, 'Список passengers' или' Пассажирские [] passengers' в 'WalkIn'? См. Http://stackoverflow.com/questions/5554217/google-gson-deserialize-listclass-object-generic-type –
NiziL
Да, он будет работать, если я верну List внутри JSON вместо простого списка. Но метод используется для разных типов пассажирских объектов ... например, PassengerOne {int price, String type} и PassengerTwo {String Name, int price} и т. Д. Таким образом, WalkIn должен содержать список. Позже он преобразуется –
TorK
, преобразованный в PassengerOne p = walkInRequest.passengers.get (0). В другое время PassengerTwo передается в JSON. – TorK