2015-12-31 72 views
1

我有一個JSON它看起來像這樣如何使用GSON與公共基類反序列化JSON

{ 
    user:{ 
      name:abc 
      email:[email protected] 
      .....  
      } 
    responseCode:1 
    responseMessage:Done 
} 

我使用改造2 GSON轉換器。 2參數 responseCoderesponseMessage出現在每個JSON中。微分參數是「用戶」

所以我創建了一個類

class BaseResponse { 
    public int responseCode; 
    public String responseMessage; 
} 

然後POJO的其餘部分延伸是這樣的:

class User extends BaseResponse { 
    public String name; 
    public String email; 
} 

問題是,GSON不反序列化「用戶」部分。 我想我必須寫一個解串器

return new JsonDeserializer<T>() { 
      @Override 
      public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
        throws JsonParseException { 

       JsonObject jsonObject = json.getAsJsonObject(); 
       int  messageCode = jsonObject.get("responseCode").getAsInt(); 

       if (messageCode == 1) { 
        **// What do I do now?** 
       } 

       return null; 
      } 
     }; 

問題是,GSON將用戶對象返回給我的用戶對象元素全爲空。

我是一種修復。無論如何,這是可能的嗎?我可以通過做JsonObject jo = json.getAsJsonObject().getAsJsonObject("user");或父母來獲得孩子班級的材料。 任何幫助,將不勝感激。

回答

2

你只需要製作這3個類,那麼你就不需要編寫一個反序列化器。

public abstract class BaseResponse { 
    public int responseCode; 
    public String responseMessage; 
} 

public class UserResponse extend BaseResponse { 
    private User user; 
} 

public class User { 
    private String name; 
    private String email; 
} 

那麼你剛纔說Call<UserResponse> listRepos(@Path("user") String user);

+0

所以你我試了一下。我不得不使'用戶擴展UserResponse',否則它不起作用。不管怎樣,謝謝! – Uday