2012-02-10 42 views
6

我的服務器返回JSON中的對象列表。例如,它們可能是CatDog使用GWT上的AutoBean解析未知類型的JSON對象

當我知道他們都將是Cat s,我可以設置AutoBeanCodex輕鬆工作。當我不知道它們是什麼類型時,但是......我應該怎麼做?

我可以給我所有的實體一個類型字段,但然後我必須解析每個實體,然後纔將它傳遞給AutoBeanCodex,這與界限不符。我還有什麼其他選擇?

回答

8

剛開始使用這個有一天,並爭取了幾個小時,嘗試@Category方法和其他,直到我發現這一點:您可以創建一個屬性Splittable類型,它代表的底層傳輸類型一些編碼爲布爾值/字符串/列表/地圖。就我而言,我知道一些在設計時會覆蓋線的包絡類型,並且基於其他一些屬性,其他一些域可以是任何其他的自動對象。

你甚至都不需要知道其他的bean在編譯時的類型,你可以使用Splittable的方法得到的值,但是如果使用autobeans無論如何,它是很好的定義被包裹的數據。

interface Envelope { 
    String getStatus(); 
    String getDataType(); 
    Splittable getData(); 
} 

(塞特斯可能,如果你發送的數據以及recieving期望 - 編碼豆成`可裂到在一個信封把它比解碼更容易)

的JSON發送過來的電線被解碼(可能使用AutoBeanCodex)到Envelope類型,並且你已經決定以後有什麼類型必須走出getData()方法,調用像這樣得到嵌套對象了

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
               SpecificNestedBean.class, 
               env.getData()).as(); 

Envelope類型和嵌套類型(上面的factory)甚至不需要是相同的AutoBeanFactory類型。這可以讓你從通用傳輸實例中抽象出信封的讀寫,併爲每個dataType字符串屬性使用特定的工廠來解碼數據的模型(和嵌套模型)。