如果ArrayList包含一个元素,则将其作为对象进行重新发送

时间:2014-07-08 09:28:44

标签: java gson retrofit

使用改装时我遇到的问题是,当我有这个清单时:

List<String> items = new ArrayList<String>();
items.add("item1");

我用gson转换器对其进行了改造,然后我将其作为输出:

{ "item1" }

当我有这个时:

List<String> items = new ArrayList<String>();
items.add("item1");
items.add("item2");

然后我得到

[ "item1", "item2" ]

我能做些什么吗?我尝试编写这样的自定义提供程序:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(List.class, new List1ElementAsArrayAdapter());

使用List1ElementAsArrayAdapter:

public class List1ElementAsArrayAdapter implements JsonSerializer<List<?>> {
    @Override
    public JsonElement serialize(List<?> list, Type type, JsonSerializationContext jsonSerializationContext) {
        if (list.size() == 1) {
            // Don't put single element lists in a json array
            return new Gson().toJsonTree(list.get(0));
        } else {
            return new Gson().toJsonTree(list);
        }
    }
}

但这不起作用

1 个答案:

答案 0 :(得分:0)

我没有找到一个好的解决方案,所以我决定改变我正在做的事情。

我现在正在创建一个JSONArray对象并将所有键添加到该对象中,而不是仅创建String类型的List。

示例:

JSONArray ids = new JSONArray();
ids.put("item1");

这正确地回复了我想要的东西。希望这有助于其他与我有同样问题的人。