2016-02-16 3 views
1

мне нужно десериализация следующего:Deserialize JSON для объектов Java с наследованием?

{ 
    "name": "library", 
    "contains": [ 
     { 
      "name: "office", 
      "contains": [] 
     }, 
     { 
      "name": "Home", 
      "contains":[{ 
       "name": "Shelf", 
       "contains" : [] 
      }] 
     }] 
} 

Мой класс выглядит следующим образом:

public class Container 
{ 
    String containerName; 
} 
Public class Contains extends Container { 
    @SerializedName("contains") 
    @Expose 
    private List<Container> contains; 
} 

Как это то, что когда я запускаю мой код, я надеюсь получить содержит объект для запуска моих методов он не получит меня. Но я получаю контейнерный объект и не могу запускать свои методы из класса Содержит.

ответ

0

Вам не нужно наследование здесь. Просто используйте Gson.fromJson().

класс Object

public class Container { 
    @SerializedName("name") 
    @Expose 
    private String name; 
    @SerializedName("contains") 
    @Expose 
    private List<Container> contains; 

    public Container(String name) { 
     this.name = name; 
     contains = new ArrayList<Container>(); 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void add(Container c) { 
     this.contains.add(c); 
    } 

    public void setContainerList(List<Container> contains) { 
     this.contains = contains; 
    } 

    public String getName() { 
     return name; 
    } 

    public List<Container> getContainerList() { 
     return this.contains; 
    } 
} 

Код

public static void main(String[] args) { 
    Container lib = new Container("library"); 
    Container office = new Container("office"); 

    Container home = new Container("Home"); 
    Container shelf = new Container("Shelf"); 

    home.add(shelf); 
    lib.add(office); 
    lib.add(home); 

    Gson gson = new Gson(); 
    // Serialize 
    String json = gson.toJson(lib); 

    // Deserialize 
    Container container = gson.fromJson(json, Container.class); 

    System.out.println(container.getName()); 
    for (Container c : container.getContainerList()) { 
     System.out.println("-- " + c.getName()); 
    } 
} 

Выход

library 
-- office 
-- Home 
+0

Я добавляю Содержит объект в list.Like Список contains.add (новый Содержать (полка)); –

+0

Вам не нужно «Содержит» ... «Контейнер» имеет имя и список вещей, которые он содержит. –

+0

Когда я десериализую его. Объект Contain, который я получаю, выполняя gson.fromJson (json, Contains.class), возвращает мне объекты контейнера, но он содержит объект –