2011-11-07 4 views
2

두 개의 서로 다른 웹 응답에 동일한 객체 구조를 사용하기 때문에 직렬화 문제가 있습니다. '검색'에서는 객체의 배열을 가져오고 '세부 사항'에서는 하나의 객체 만 얻습니다.gson.fromJson - deserialization 실패

검색 코드 :

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); 

세부 코드 : 나는 같은 객체 hireachy와 응답을 서비스에서

InputStream source = Helper.retrieveStream("http://<domainname>/search.jsp?action=detail&id=" + id); 

TopObject -> SearchResponse -> 응답하지만, 첫 번째 경우 (검색) Response []의 배열을 얻었고 두 번째 경우 (Details)에서 단일 Response 객체를 얻습니다.

분명히 코드는 단지 하나의 응답 대신 Response의 배열을 기대하기 때문에 두 번째 시나리오에서는 내 직렬화가 실패합니다.

어노테이션 @SerializedName을 사용하여 속성의 이름을 변경할 수있는 것처럼 객체의 이름을 변경할 수 없다는 것을 깨달았습니다.

의견이 있으십니까?

+0

다른 도메인 개체를 만들어 TopObject -> SearchResponse -> Response [] & TopObject -> DetailsResponse -> Response로 구분하여 처리하십시오. – yorkw

+0

클래스 이름에 주석을 달 수 없기 때문에 "Response"객체와 "Response []"배열 객체를 어떻게 처리 할 수 ​​있습니까? – NiTiN

+0

아마도 두 응답의 JSON 소스를 붙여 넣을 수 있습니까? 또한 개체의 계층을 붙여 넣으십시오. 감사 – styler1972

답변

관련 문제