2012-08-13 3 views
0

자바에서 임의의 클래스를 중첩 TMP => { "RESULT_COUNT"1 "next_offset"1 "entry_list": [{ "ID": " "name": "name": "name": "xyz123", "module_name": "제품", "name_value_list" "값": "test_product_2"}}}] "relationship_list"직렬화 내가 JSON 문자열을 변환해야 GSON

내 POJO는

public class GetEntryListResponse { 

public int result_count = 0; 
public int next_offset = 0; 
public List<EntryList> entryList = new ArrayList<EntryList>(); 
public static class EntryList { 
    String id = ""; 
    String module_name = ""; 
    public static class NameValueList { 
     public static class Id { 
      String name = ""; 
      String value = ""; 
     } 
     public static class Name { 
      String name = ""; 
      String value = ""; 
     } 
    } 
} 
} 

같은과 deserilizing 태스크 A에 대해 보이는 해당 자바 POJO로 []} 사용하다

Gson json_response = new Gson(); 
GetEntryListResponse resp = json_response.fromJson(tmp, 
                GetEntryListResponse.class); 

다른 변형도 시도했지만이 중 가장 좋은 것으로 보입니다. 문제는 result_count 및 next_offset이 int로 변환되지만 entryList 배열의 유형이 null 값을 갖는 것입니다.

+0

당신은 스타일을 혼합하고 있습니다 :'result_count'와'entryList'는 함께 괜찮을 수 있습니다 (Json에서 같은 혼돈을 사용하지 않는다면). 'FieldNamingStrategy'를 사용하여 당신을 볼 수 없기 때문에 어떻게 작동 할 수 있는지 궁금합니다. – maaartinus

답변

0

public class GetEntryListResponse implements 
      InstanceCreator<GetEntryListResponse>, 
      JsonDeserializer<GetEntryListResponse>{ 

    @Override 
     public GetEntryListResponse createInstance(Type type) { 
      return this; 
     } 

    @Override 
     public GetEntryListResponse deserialize(JsonElement json, Type typeOfT){ 
     json.getJsonObject();// 
    // create your classes objects here by json key 
    } 

하고

GsonBuilder builder = new GsonBuilder(); 
     Gson gson = builder.registerTypeAdapter(GetEntryListResponse.class, 
       new GetEntryListResponse()).create(); 
+0

이것은 의미가 없습니다. 여기서 인스턴스 생성과 관련된 문제는 볼 수 없으며 사용자 정의 직렬화에 대한 필요도 없습니다. 그리고 왜 클래스가'InstanceCreator' 및/또는'JsonDeserializer'로 사용되어야하는지 이해하지 못합니다 (나쁜 스타일이 아닙니까?). – maaartinus

+0

** entry_list **에 ** entryList **를 변경하는 두 번째 게시물에서 언급했듯이. 하지만 제 생각에는 당신의 제안이 선호됩니다. 내가 이걸 다시 만난다면 @ yahor10이 언급 한대로 사용자 지정 디시리얼라이저를 사용할 것이라고 생각합니다. –

0

변화하려고 사용하는 클래스에 대한 InstanceCreator 및 JsonDeserializer 구현 :

public List<EntryList> entryList = new ArrayList<EntryList>(); 

에 :

public List<EntryList> entry_list= new ArrayList<EntryList>(); 

및 비 직렬화.

+0

** entryList **를 ** entry_list **로 변경하는 것은 어떻게 든 속임수를 사용했습니다. 클래스 구조를 정적 클래스에서 인스턴스 기반 인스턴스로 변경했습니다. 여전히 gson 사용자 가이드에 따라 임의의 클래스가 정적 방법으로 사용되어야하기 때문에 이것이 왜 작동하는지 이해할 수 없습니다 [RawCollectionsExample] (http://code.google.com/p/google-gson/source/browse/trunk/ 엑스트라/src/main/java/com/google/gson/extras/examples/rawcollections/RawCollectionsExample.java) –