Уничтожение дескрипции HashMaps в Google GSON
В моем текущем проекте я использую библиотеку GSON в android, и я столкнулся с проблемой десериализации. Вот как выглядит исходный json
{
"5":{
"id":5,
"name":"initial name",
"image_url":"uploads/71d44b5247cc1a7c56e62fa51ca91d9b.png",
"status":"1",
"flowers":{
"7":{
"id":7,
"category_id":"5",
"name":"test",
"description":"some description",
"price":"1000",
"image_url":"uploads/test.png",
"status":"1",
"color":"red",
}
}
}
}
И мой pojo's
class Category {
long id;
String name;
String image_url;
HashMap<String,Flower> flowers;
}
И Цветочный класс
class Flower {
long id;
String category_id;
String name;
String description;
String price;
String image_url;
String status;
}
Но когда я пытаюсь десериализовать эти объекты, я могу получить доступ к вложенным хэшмапам, код примера
public class TestJson {
public static void main(String[] args) {
Gson gson = new Gson();
try {
BufferedReader br = new BufferedReader(
new FileReader("2.txt"));
HashMap<String,Category> map = gson.fromJson(br, HashMap.class);
Collection<Category> asd = map.values();
System.out.println(map.values());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Любые предложения?
Ответы
Ответ 1
Этот gson.fromJson(br, HashMap.class);
сообщает Gson, что вы хотите десериализовать Map of unknown type. У вас возникнет соблазн указать что-то вроде Map<String,Category>.class
, но вы не можете сделать это в Java, поэтому решение должно использовать то, что они называли TypeToken в Gson.
Map<String, Category> categoryMap = gson.fromJson(br, new TypeToken<Map<String, Category>>(){}.getType());