我正在使用谷歌的 GSON 包 http://code.google.com/p/google-gson/
我正在将 JSON 转换为 Java。
我有一段代码可以用来进行转换。
Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<QueryProperty>>() {}.getType();
Collection<QueryProperty> queryProperties = gson.fromJson(query, collectionType);
我的 QueryProperty 类有这些字段(带有 getter/setter):
int id;
String uri;
String name;
Set<QueryValue> values;
String selected;
QueryValue 类以前有这些字段(带有 getters/setters):
int id;
String uri;
String name;
我现在希望能够拥有不同类型
的QueryValue。
我想添加一个 NumericQueryValue 类(QueryValue 的子类),这样我就可以传入一组用于查询数据库的边界。
double lower;
double upper;
并且想要创建一个新的 ResourceQueryValue(QueryValue 的子类),它看起来与 QueryValue 过去一样:
int id;
String uri;
String name;
无论如何我可以完成这项工作吗?它有一个通用的 QueryValue 类,但根据 JSON 提供的参数返回正确的子类。
如果我不清楚,请告诉我。
最佳答案
除了实现自定义反序列化处理之外,Gson 目前没有简单的多态反序列化机制。下一个版本看起来会提供一个内置的解决方案。
StackOverflow.com 上关于此主题的问题和答案(部分带有示例):
关于java - 我可以实例化一个父类(super class)并根据提供的参数实例化一个特定的子类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424848/