2010-10-25 41 views
0

我有休息和Android的問題, 問題是我有一個傳輸對象在例如一個類人類,這是由男性和女性擴展,我想使用JSON作爲人類物體的運輸工具。 如果我使用標準序列化對象,我通常會做Json到pojo unmarshaler與多態性類爲android

if(human instanceof Male.class){} 
else if(human instance of Female.class){} 
else{ throw new RuntimeException("incorrect class")} 

我怎麼與其他機器人實現這一點? 我看到Gson和Jaskson不支持多態, 在服務器端,我們使用Apache CXF休息,用jax-rs註釋 想法/以前的經驗?

回答

0

我不知道任何自動執行反序列化的方法,但一種解決方案是爲您的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"); 
} 

在這個例子中hasMalePartshasFemaleParts是任意的布爾標誌,但是,在很多情況下,你可以(更正確地)使用標識屬性輸入。所以,如果你想區分MotorcycleCar,你可以檢查number_of_wheels