2013-07-16 3 views
0

Это мой первый вопрос, заданный здесь, после 3 лет компьютерной науки, так голый со мной.Deserializing внутренний класс с gson возвращает null

Я хочу использовать Gson для десериализации моего JSON в объекты. Я определил соответствующие классы, и некоторые из этих объектов класса включены в другие объекты. При попытке десериализовать весь JSON я получил нулевые значения, поэтому я начал разбить его.

Я достиг точки, где все нижние классы стоят на себе, но при попытке десериализации в объект, содержащий экземпляр этого более мелкого объекта, - каждая вещь возвращается как нуль.

Мой частичный JSON:

{ 
    "user_profile": { 
    "pk": 1, 
    "model": "vcb.userprofile", 
    "fields": { 
     "photo": "images/users/Screen_Shot_2013-03-18_at_5.24.13_PM.png", 
     "facebook_url": "https://google.com/facebook", 
     "site_name": "simple food", 
     "user": { 
     "pk": 1, 
     "model": "auth.user", 
     "fields": { 
      "first_name": "blue", 
      "last_name": "bla" 
     } 
     }, 
     "site_url": "https://google.com/" 
    } 
    } 
} 

UserProfile Класс:

public class UserProfile { 
    private int pk; 
    private String model; 
    private UPfields fields = new UPfields();//i tried with and without the "new" 
} 

UPfields Класс:

public class UPfields { 
    private String photo; 
    private String facebook_url; 
    private String site_name; 
    private User user; 
    private String site_url; 
} 

Класс пользователя:

public class User { 
    private int pk; 
    private String model; 
    private Ufields fields; 
} 

Ufields Класс:

public class Ufields { 
    private String first_name; 
    private String last_name; 
} 

В моей основной я называю:

Gson gson = new Gson(); 
UserProfile temp = gson.fromJson(json, UserProfile.class); 

Так что мой объект темп содержит только нулевые значения. Я попытался изменить классы на статические, и это не сработает. Объект UPfields и все нижние работают нормально.

Любые предложения? , когда я удалить «{ „User_Profile

“:» и это закрывающая скобка, то Deserialize к объекту User_Profile работает.

ответ

2

Для того, чтобы разобрать этот json пример вы должны создать вспомогательный класс, который будет содержать поле с именем user_profile типа UserProfile:

public class UserProfileWrapper { 
    private UserProfile user_profile; 
} 

и разобрать эту json строку с этим классом:

UserProfileWrapper temp = gson.fromJson(json, UserProfileWrapper.class); 
+0

Я не согласен. Для него было бы лучше проанализировать значение поля user_profile из объекта JSON, а не вводить лишний класс-оболочку. –

+0

@TomG Ну и могли бы вы предоставить простой способ, как это сделать с помощью Gson? – Andremoniy

+0

@Andremoniy Я попробовал, он по-прежнему недействителен. – nitzanwe

0

Gson начинает с разбора внешнего объекта, который в вашем случае имеет одно поле, user_profile. Ваш класс UserProfile не имеет поля user_profile, поэтому он не может десериализовать его как экземпляр этого класса. Вы должны попытаться десериализировать значение поля user_profile.

+0

Ну и могли бы вы предоставить простой способ, как это сделать с помощью' Gson'? – Andremoniy

+0

oh PLZ показать мне, как ... Я видел, что когда я удаляю {"user_profile": ....}, это работает ... так в чем проблема? – nitzanwe

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