2017-01-05 4 views
2

GSON을 사용하여 하위 중첩 속성에 액세스하는 방법이 있는지 알고 싶습니다. 바람직하게는 내가 직접 중첩 된 속성에 액세스 할 수있는 메커니즘을 가지고 싶다, 나는 상태를 처리하기위한 별도의 클래스를 정의하지 않으GSON을 사용하여 간단한 중첩 속성에 대한 기간 사용

data: { 
    myobject: { 
    name: "test", 
    status: { 
     active: 1 
    } 
    } 
} 

:

이 JSON을 고려하십시오. 예를 들어

:

public class MyObject { 

    @SerializedName("name") 
    public String name; 

    @SerializedName("status.active") 
    private Boolean active; 

} 

이 사용 GSON이나 다른 안드로이드 JSON 파서를 할 수있는 방법이 있나요?

+1

활성 상태의 상태 innner 클래스를 만듭니다. –

+0

내가 피하고 싶은 설명에 명시 적으로 언급했습니다 ... – apascual

+1

귀하의 의도를 더 잘 나타 내기 위해 귀하의 질문을 편집했습니다. –

답변

0

현재 JsonDeserializer라는 것을 사용하는 예입니다 :

Gson gson = new GsonBuilder() 
      .registerTypeAdapter(Double.class, new JsonDeserializer<Double>() { 
       @Override 
       public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
        JsonObject jobject = (JsonObject) json; 

        return new MyObject (
          jobject.get("name").getAsString(), 
          jobject.get("status").getAsJsonObject().get("active").getAsBoolean()); 
       } 
      }) 
      .create(); 

사용자 정의 방식으로 그 클래스를 직렬화이었다 무슨 일이 있었는지,이 코드를 테스트하지 못했지만 작동한다, 적어도 그 년대 바른 길. 또한

당신을 MyObject에 생성자

public class MyObject { 

    @SerializedName("name") 
    public String name; 

    @SerializedName("status.active") 
    private Boolean active; 

    public MyObject(String name, Boolean active){ 
     this.name = name; 
     this.active = active; 
    } 
} 

TIP : 조건

를 사용 당신은 또한 반대를 할 JsonSerializer를 사용하는 클래스를 가지고 및 제거와 같은 사용자 정의 방식으로 직렬화 수있는 어떤 일
+0

이 답변이 올바른 방향으로 진행되고 있지만, 더 많은 상용구 코드가 생성됩니다. extra inner class ... 내가 찾고있는 것은 모든 클래스와 재귀 적으로 사용할 수있는 SerializerName 주석의 일반적인 확장이다. – apascual