我正在使用Google的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类以前具有以下字段(带有getter / setter):

int id;
String uri;
String name;


我现在希望能够拥有不同的QueryValue types

我想添加一个NumericQueryValue类(QueryValue的子类),因此我可以传入一组查询数据库的范围。

double lower;
double upper;


并要创建一个新的ResourceQueryValue(QueryValue的子类),该外观与用于以下目的的QueryValue相同:

int id;
String uri;
String name;


无论如何,我可以做这项工作。那是一个通用的QueryValue类,但是根据JSON提供的参数返回了正确的子类。

如果我不清楚,请告诉我。

最佳答案

除实现自定义反序列化处理外,Gson当前还没有用于多态反序列化的简单机制。下一个版本看起来像它将提供一个内置的解决方案。

上一个StackOverflow.com上有关此主题的问题和解答(带有示例):


Deserialising a generic with unknown compile time type where a field indicates the type
Parse JSON with no specific structure for a field with GSON
json object serialization/deserialization using google gson
Polymorphism with gson

10-04 15:26