2015-12-31 2 views
1

У меня есть JSON, который выглядит как этотКак десериализации JSON, используя GSON с общим базовым классом

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

Я использую Дооснащение 2 с GSON конвертора. 2 параметра responseCode и responseMessage появляются в каждом JSON. Дифференцируя параметр «пользователь»

Так что я создал класс

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

Тогда остальные Pojos продлить что-то вроде этого:

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 возвращает мне объект User с элементами всех элементов пользователя.

Я как бы исправимо. В любом случае это возможно? Либо я получаю материал класса child, делая 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

так я я попробовал. Мне пришлось сделать «User extend UserResponse», иначе он не работал. В любом случае, спасибо! – Uday

 Смежные вопросы

  • Нет связанных вопросов^_^