我不知道任何自動執行反序列化的方法,但一種解決方案是爲您的JSON使用「duck typing」解析器。
假設以下
class Human {
public Human(JSONObject jo) {
// Parse out common json elements
}
}
class Male {
private boolean hasMaleParts;
public Male(JSONObject jo) {
super(jo);
// Parse out male only parts
}
}
class Female {
private boolean hasFemaleParts;
public Female(JSONObject jo) {
super(jo);
// Parse out female only parts
}
}
有了這三類,在您的網絡接入碼的地方,有哪些類型的返回的JSON並返回相應的對象的方法。
public Human typeJson(JSONObject jo) {
if(jo.hasBoolean(hasMaleParts))
return new Male(jo);
else if(jo.hasBoolean(hasFemaleParts))
return new Female(jo);
else
throw new RuntimeException("Unable to determine data type");
}
在這個例子中hasMaleParts
和hasFemaleParts
是任意的布爾標誌,但是,在很多情況下,你可以(更正確地)使用標識屬性輸入。所以,如果你想區分Motorcycle
和Car
,你可以檢查number_of_wheels
。