2011-11-17 3 views
4

내 클래스는 같은 수 있습니다 :GSON 사용자 지정 역 직렬화 논리 필드 이름을 기반으로

class Foo { 
    public String duration; 
    public String height; 
} 

그리고 지금은하여 직렬화하는

{"duration":"12200000", "height":"162"} 

처럼 내 JSON 데이터 보인다

Foo foo = gson.fromJson(jsonStr, Foo.class); 

따라서 foo.duration은 "20 분"(분 수), foo.height는 "162cm"입니다.

Gson을 사용하여이 작업을 수행 할 수 있습니까?

감사합니다.

+0

"역 직렬화"란 무엇을 의미합니까? –

+0

나는 Foo foo = gson.fromJson (...) – smilingcoder

답변

6

GSON을 사용하면 사용자 정의 디시리얼라이저/시리얼 라이저를 만들 수 있습니다. here을 읽으십시오.

예제가 없으니 죄송합니다. 다음

class FooDeserializer implements JsonDeserializer<Foo>{ 
    @Override 
    public Foo deserialize(JsonElement json, Type typeOfT, 
    JsonDeserializationContext context) throws JsonParseException { 

    JsonObject jo = (JsonObject)json; 
    String a = jo.get("duration").getAsString()+" mins"; 
    String b = jo.get("height").getAsString() + " cm"; 

//Should be an appropriate constructor 
    return new Foo(a,b); 
    }    
} 

:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, foo.new FooDeserializer()).create(); 

하고 fromJson(...)를 사용하여 얻을 수를 원하는대로 결과를 받아야합니다.

+0

을 의미한다. 예, 위의 예에서 위의 예에서 사용자 지정 디시리얼라이저 def는 데이터 형식을 기반으로하며, 두 필드 유형 모두 String이지만 다른 비 직렬화 논리를 기반으로합니다. 필드 이름에. – smilingcoder

+0

수정 된 답변 확인. – 87element

+0

좋아요! 이것은 효과가있다. 감사! – smilingcoder