我有一个JSON objext,如下所示:
{
"isDefault": false,
"someIndex":
[
0
],
"label": "Hello",
"valueKindName": "someId",
"value": 3,
"conditions":
{
"salesType":
[
1,
2
],
"productType":
[
1,
5
]
}
}
现在我的条件类看起来像这样:
public class Conditions {
private List<Integer> salesType = new ArrayList<Integer>();
private List<Integer> productType = new ArrayList<Integer>();
}
这很有效。 我想要做的是概括我的课程,以便我可以在以下条件下使用任何新类型:
"exampleType":
[
6,
9
]
无需添加
private List<Integer> exampleType = new ArrayList<Integer>();
到我的Conditions.class
。
我想到了以下几点:
public class Conditions {
private ArrayList<Condition> conditions = new ArrayList<Condition>();
}
和
public class Condition {
private String key;
private ArrayList<Integer> values;
}
但Gson当然不知道如何将JSON转换为该类型的数据结构。
任何帮助都会得到高度赞赏:)
答案 0 :(得分:1)
您可以注册自己的转换器。看起来有点像这样:
public class ConditionConverter implements JsonSerializer<Condition>, JsonDeserializer<Condition>
{
@Override
public JsonElement serialize(Condition src, Type typeOfSrc, JsonSerializationContext context)
{
final JsonObject cond = new JsonObject()
cond.add(src.key, context.serialise(src.values);
return cond;
}
public Condition deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
{
// pick apart and make a condition again
}
}
然后使用GsonBuilder
注册类型适配器:
builder.registerTypeAdapter(Condition.class, new ConditionConverter());
要分开您的对象,您需要使用JsonObject.entrySet()
,因为您事先不知道密钥名称。如果你采用这样的JSON,你的工作会稍微容易一些:
{
key: "exampleType",
values: [ 42, 43 ]
}