我有一组课程,例如:
entityClasses = new HashMap<String, Class>();
entityClasses.put("EntityType1", EntityType1.class);
entityClasses.put("EntityType2", EntityType2.class);
我也有他们实例的JSON列表:
String entityJSON = "[{"type":"EntityType1","name":"... attributes"},...]";
type 属性将确定将成为JSON解析目标的对象的类。我如何使用gson解析这些?
我尝试了以下内容:
String type = "EntityType1"; // I already can fetch this.
final Class entityClass = entityClasses.get(type);
new Gson().fromJson(entityJSON, new TypeToken<ArrayList<entityClass>>(){}.getType());
如果 entityClass 是实际的类名,而不是表示类的变量,那将会有效。但在我的情况下,我收到以下错误: 未知类:&#39; entityClass&#39;
那么如何通过Class变量进行解析呢?
提前致谢!
答案 0 :(得分:0)
通常,您不能这样做,因为您应该将类作为泛型类型传递:不是List<String.class>
,而是List<String>
。
但是你可以使用这样的解决方法:存储列表TypeToken
而不是列表泛型类型:
entityClasses = new HashMap<String, TypeToken>();
entityClasses.put("EntityType1", new TypeToken<ArrayList<EntityType1>>(){});
...
String type = "EntityType1"; // I already can fetch this.
final TypeToken typeToken= entityClasses.get(type);
new Gson().fromJson(entityJSON, typeToken.getType());