2010-01-09 51 views
2

我正在使用Grails Webflow,我傳遞給視圖的任何對象,它必須被序列化。 我的領域模型「實現Serializable」,所以他們工作。「org.json.JSONArray implements Serializable」:什麼是實現這一目標的最佳選擇?

問題是當我從WebService得到響應。 它是org.json.JSONArray類。

我只是想在通過整個陣列的視圖但它沒有實現Serializable, 所以失敗了,

我如何可以通過這個,還是我最好的選擇有什麼想法?

我可以只編輯org.json庫的源代碼,並使每個類「imp serializable」?

或處理結果爲域對象那些「小鬼序列化」

+0

您的看法如何處理'JSONArray'? – skaffman

+0

我想打印出這個數組的值, 所以我總是可以將數組處理成一個可序列化的對象的正常數組 – Daxon

回答

6

將它換成transient屬性,該屬性實現了Serializable並且readObject()writeObject()被覆蓋。

public class SerializableJSONArray implements Serializable { 
    private transient JSONArray jsonArray; 

    public SerializableJSONArray(JSONArray jsonArray) { 
     this.jsonArray = jsonArray; 
    } 

    public JSONArray getJSONArray() { 
     return jsonArray; 
    } 

    private void writeObject(ObjectOutputStream oos) throws IOException { 
     oos.defaultWriteObject(); 
     oos.writeObject(jsonArray.toString()); 
    } 

    private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException, JSONException { 
     ois.defaultReadObject(); 
     jsonArray = new JSONArray((String) ois.readObject()); 
    } 
} 

你看到有一個getter函數返回被包裝的JSONArray。改爲在您的域對象中使用它。或者,您也可以讓此類extends JSONArray並將其所有方法委託給包裝的JSONArray。一個體面的IDE可以在一秒鐘內爲你自動生成它們。

+0

會不會導致變量丟失? – CodyBugstein

1

不記得實際的類的行爲,但你可以只把它作爲String表示(這顯然是Serializable)的 JSON,然後重新解析到JSONArray在另一邊 - 至少JSONObject可以直接從JSON字符串構建,從我的頭頂我想不出爲什麼JSONArray不會太。

+0

Mh,可悲的是該類只需要實現Serializable, 我無法解析它在視圖方面,它放置在會議中移動,爲了緊湊,我會說 – Daxon

+0

啊對,查看全部關於''在Grails中。 – Esko

0

根據this link,您所需要做的就是將JSONArray對象聲明爲transient。一旦它被聲明爲transient,它將被可序列化的運行時忽略。

相關問題