我有一个名为buttons的JSON键--这个JSON键可以采用任何一种形式,一个JSON或一个JSON对象。但是,由于我使用的是Pojos,所以只能定义一种类型的buttons变量。Buttons buttons (用于JSON对象)或 List<Buttons> buttons (用于JSON )。但是,如果运行时类型的CONVERSION与我的变量类型不匹配,则会导致buttons异常。我应该如何处理这种情况?改造2能解决这个问题吗?
代码:
当buttons是JSON数组类型时
buttons: [
{
title: "key1",
value: "value1"
},
{
title: "key2",
value: "value2"
},
{
title: "key3",
value: "value3"
}
],当buttons是JSON对象类型时
buttons: {
title: "key",
value: "value"
},发布于 2016-09-13 08:15:10
在这种情况下,创建JsonDeserializer的更好解决方案
你可以使用这样的东西:
public class TestDeser implements JsonDeserializer<ButtonList>{
@Override
public ButtonList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final ButtonList list = new ButtonList();
if (json.isJsonArray()) {
for (int i = 0; i < json.getAsJsonArray().size(); i++) {
final Button btn = context.deserialize(json.getAsJsonArray().get(i), Button.class);
list.buttons.add(btn);
}
} else {
final Button btn = context.deserialize(json.getAsJsonObject(), Button.class);
list.buttons.add(btn);
}
return list;
}}在本例中,您可以看到如何检查输入json是JsonArray还是JsonObject,并继续进行解析按钮的默认逻辑。
您可以注册此反序列化器,如下所示:
new GsonBuilder().registerTypeAdapter(ButtonList.class, new TestDeser()).create();https://stackoverflow.com/questions/39464417
复制相似问题