我会做这样的事情:
public class StringList extends ArrayList<String> { // Empty on purpose. The class is here only to be recognized by Gson}public class CitationMain { @SerializedName("field_name_here") StringList values; // Your other fields}然后在创建RestAdapter时:
public class StringListDeserializer implements JsonDeserializer<StringList> { @Override public StringList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { StringList value = new StringList(); if (json.isJsonArray()) { for (JsonElement element : json.getAsJsonArray()) { value.add(element.getAsString()); } } else { value.add(json.getAsString()); } return value; }}然后:
Gson gson = new GsonBuilder() .registerTypeAdapter(StringList.class, new StringListDeserializer()) .create();RestAdapter.Builder builder = new RestAdapter.Builder() //... .setConverter(new GsonConverter(gson));
这不是理想的,因为对象是自定义的,但是我现在能想到的任何其他解决方案都更加复杂。
这里的反序列化器专门为声明为的字段注册
StringList,将处理单个字符串的情况以及字符串数组的情况。任何其他字段类型将使用默认的反序列化过程。



