簡體   English   中英

使用繼承將JSON反序列化為Java對象嗎?

[英]Deserialize JSON to Java objects with inheritance?

我需要反序列化以下內容:

{
    "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;
}

當我運行代碼時,我希望得到一個包含對象來運行我的方法,但不會得到它們。 但是我得到了一個容器對象,無法在Contains類中運行我的方法。

您不需要在這里繼承。 只需使用Gson.fromJson()

對象類別

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM