我遇到了反序列化的问题,因为我对两个不同的web响应使用相同的对象结构。在'search'中,我获得了一个对象数组,在'details'中我得到了一个对象。
搜索代码:
InputStream source = Helper.retrieveStream("http://<domainname>/search.jsp?action=search&q=" + query);
Reader reader = new InputStreamReader(source);
Gson gson = new Gson();
SearchObj searchResponse = gson.fromJson(reader, SearchObj.class);
详情代码:
InputStream source = Helper.retrieveStream("http://<domainname>/search.jsp?action=detail&id=" + id);
从服务中我得到同样的对象的回应 TopObject - &gt; SearchResponse - &gt;响应,但在第一种情况下(搜索)我得到Response []数组,在第二种情况下(详细信息)我得到单个Response对象。
很明显,我的反序列化在第二种情况下失败,因为代码期望响应数组而不是只有一个响应。
我意识到我无法更改对象的名称,就像我可以使用注释@SerializedName更改属性的名称。
有什么建议吗?
答案 0 :(得分:1)
使用Gson来反序列化有时是数组的JSON,有时候是对象需要自定义反序列化。先前的StackOverflow线程已涵盖此特定问题,例如Parsing JSON with GSON, object sometimes contains list sometimes contains object。