Retrofit 1.9 - 相同的变量名,不同的JSON类型 - CONVERSION异常

时间:2016-09-13 07:28:28

标签: android retrofit

我有一个名为tsCharacter <- c("2016-03-27 01:00:00", "2016-03-27 02:00:00", "2016-03-27 03:00:00") as.POSIXct(tsCharacter) "2016-03-27 CET" "2016-03-27 CET" "2016-03-27 CET" 的JSON密钥 此JSON密钥可以采用任何形式,JSON数组或JSON对象。 但是,由于我使用Pojos,我只能定义一种buttons变量。 buttons(对于JSON对象) Buttons buttons(对于JSON数组)。 但是,如果List<Buttons> buttons的运行时类型与我的变量类型不匹配,则会导致改进的CONVERSION异常。 我应该采取什么方法处理这种情况? Can Retrofit 2可以解决这个问题吗?

代码:

buttons是JSON数组类型

buttons

buttons: [ { title: "key1", value: "value1" }, { title: "key2", value: "value2" }, { title: "key3", value: "value3" } ], 是JSON对象类型

buttons

1 个答案:

答案 0 :(得分:1)

在这种情况下,更好的解决方案是创建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,并继续使用解析Button的默认逻辑。

您可以按如下方式注册此解串器:

new GsonBuilder().registerTypeAdapter(ButtonList.class, new TestDeser()).create();