2012-06-10 1 views
0

Я пишу свое первое приложение для Android и очень ограниченный опыт в анализе данных Json обратно в POJO. Я использую GSON и его mathod fromJson(). Он работает несколько, но не все классы создаются.Gson fromJson для разных классов

Класс я сериализации является

public class User extends Model 
{ 
    public String id; 
    public String name; 
    public List<User> friends = new ArrayList<User>(); 
    public List<Match> matches = new ArrayList<Match>(); 
} 

Можно ли разобрать пользователя в класс называется User. но список пользователей в другой класс с другим именем и с гораздо меньшими параметрами

ответ

0

Создайте и зарегистрируйте адаптер типа для списка. Создание это выглядит примерно так:

private final TypeAdapter<List<User>> listOfUsersTypeAdapter = new TypeAdapter<List<User>>() { 
    @Override public void write(JsonWriter out, List<User> value) throws IOException { 
     out.beginArray(); 
     for (User user : value) { 
      out.value(user.id); 
     } 
     out.endArray(); 
    } 
    @Override public List<User> read(JsonReader in) throws IOException { 
     in.beginArray(); 
     List<User> result = new ArrayList<User>(); 
     while (in.hasNext()) { 
      User user = new User(); 
      user.id = in.nextString(); 
     } 
     in.endArray(); 
     return result; 
    } 
}.nullSafe(); 

и зарегистрировать его при создании Gson объекта:

Gson gson = new GsonBuilder() 
     .registerTypeAdapter(new TypeToken<List<User>>() {}.getType(), listOfUsersTypeAdapter) 
     .create(); 

Я не проверял это, но он должен работать. Обратите внимание, что при десериализации ваших пользователей не будет заполнено ни одно из их друзей или совпадений. Вы можете восстановить это из графика на этапе последующей обработки. Или используйте GraphAdapterBuilder, чтобы сделать это автоматически.