2017-01-05 3 views
2

GSONを使用して子のネストされた属性にアクセスする方法があるかどうかを知りたいと思います。GSONを使用して単純なネストされた属性の期間を使用する

は、このJSONを考えてみましょう:

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

Iは、好ましくは、私が直接ネストされた属性にアクセスするためのメカニズムを持っていると思い、状況を処理するための余分なクラスを定義する必要はありません。例えば

public class MyObject { 

    @SerializedName("name") 
    public String name; 

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

} 

この使用GSONや他のAndroid JSONパーサーを実行する方法はありますか?あなたが使用することができます

+1

アクティブなフィールドを持つインナークラスを作成します。 –

+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

この答えは正しい方向に進んでいますが、余分な内部クラス...私が探しているのは、どのクラスでも再帰的にそれを使用できるように、SerializerNameアノテーションの汎用拡張です。 – apascual

関連する問題