2012-07-10 4 views
4

을 자동 초기화하고 피할 수 있습니다. class Foo{int id; List<String> items; List<Long> dates;} 직렬화 해제 후에 null 인 필드를 자동으로 초기화 할 수 있습니까? Gson lib와 같은 가능성이 있습니까?Gson은 json을 비 직렬화 할 때

예 : 나는 내가 할 수있는 알고

Foo foo = new Gson().fromJson("{\"id\":\"test\", \"items\":[1234, 1235, 1336]}", Foo.class) 
foo.dates.size(); -> 0 and not null pointerException 

경우 (foo.attr == NULL) foo.attr = ...
하지만 난 푸의 지식없이,보다 일반적인 코드를 찾고 있어요 클래스
들으

편집 : 푸 미안 단지 퍼팅 게터는 충분하다


마감

+0

어디에서 기본값이됩니까? –

+0

빈 문자열 또는 목록 –

답변

0

사용자 정의 직 병렬 변환기를 만들어야합니다. 클래스를 가정

MyAwesomeClass라고, 당신은

MyAwesomeClassDeserializer implements JsonDeserializer<MyAwesomeClass> { 

@Override 
public MyAwesomeClass deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) throws JsonParseException 
{ 
    // TODO: Do your null-magic here 

} 

같은 것을 구현하고 다음과 같이 GSON에 등록 : 당신은 그냥 얻을하는 fromJson(String, TypeToken) 메소드를 호출 지금

Gson gson = new GsonBuilder() 
    .registerTypeAdapter(MyAwesomeClass.class, new MyAwesomeClassDeserializer()) 
    .create(); 

당신의 직렬화 복원 된 객체입니다.

MyAweSomeClass instance = gson.fromJson(json, new TypeToken<MyAwesomeClass>(){}.getType()); 
+0

List 을 새 ArrayList ()으로 설정해야합니다. null 인 경우 json.getAsJsonArray()를 JsonArray를 ArrayList 으로 변환하는 방법은 무엇입니까? –

+0

['JsonArray # iterator()'] (http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonArray.html#iterator%28%29)'List <> '에 요소를 추가하는'JsonArray'를 반복한다. – npe

관련 문제