2011-09-11 65 views
1

我有一個嚴重依賴於Json Web Services的android應用程序。 所以我有很多請求和響應基於json格式。 基本思想是我有一個請求,得到的是一個bean對象,例如HotelSearchData,並且請求知道如何將該bean轉換爲json map \ object,然後將JSONObject寫入網絡(使用http\https)。java bean object to android json object

自然我需要轉換和json。 暫時我做不好,但快速的方法:

  1. 得到object
  2. 有常量的在KEY_XXXX形式的列表,其中xxxx是鍵和值的名稱是將成爲json對象中的實際鍵的字符串。
  3. 使用像在下面的例子中的關鍵是:base.put(KEY_FROM_DATE, hotelSearchData.getFromDate())
  4. 爲ArrayList的\陣列我用JSONArray自然,在json每個{}是一個bean對象就我而言,我需要爲它創建一個bean。

的問題是,這樣一來,爲今後的發展也不是那麼好(爲最起碼......) 每一個新的要求,需要我,他們中的一些可能在他們裏面同樣的信息造成的信息新豆和代碼的重複性。

每一個新的請求,要求我從類似鑰匙其他要求有時會產生新的KEY決賽複製 - 白癡: -/

的第一個項目,除了優化什麼,我將做除以共享代碼bean到稍後可以擴展的較小項目,我看不到任何優雅的解決方案。

但對於請求\迴應,我想到了什麼,但我不敢肯定這是多麼優雅... 我知道谷歌有使用反射來serialize\deserializeJSONObject個不同的JSON庫。我想使用註釋並反思做serializationdeserialization,annotations應該幫助在成員名稱是不是與成員的值相同的json鍵。也對於ArrayList<?>,它的類型不保存在字節碼中,因此在編譯後不存在,因此您可以指定基本類型或完整軟件包名稱。

這樣一旦我創造了一些annotations的幫助下,豆(也許python腳本\ ant腳本來自動的一部分呢?)我可以做,如果明天我搬到xml或別的東西豆(binary)我可以創建不同的serializer,deserializer並完成它。

我希望聽聽你的意見,或者一些其他的解決方案,得到一些啓示,我與我當前的代碼很失望...... :-(

回答

2

你有沒有真的試圖gson?這都行你需要的東西,除了移動到XML /二進制部分,但你可以在你的代碼中抽象。有可能是任何XML序列化庫可能想要使用不同的註釋,所以它不會是自動的。

+0

是的,我做到了。但GSON不會爲泛型類型使用註釋,而是希望您將它賦予數組的Class對象,並且如果您的json鍵名稱與成員名稱不同,那麼至少在我使用的版本中,您可以'沒有使用註釋更改密鑰名稱。我想我可以嘗試爲GSON做出貢獻,但是我也聽到了對它的表現的批評。 – codeScriber

+0

使用最新版本。使用'@ SerializedName'可以將成員的名稱更改爲任何你想要的。 Gson也很好地支持泛型集合。至於表現方面,不要將你的決定建立在傳聞的基礎上,做一個快速的基準,如果它比你所需要的更慢,那麼你可以考慮其他的東西。 –

+0

10x。然後,我會再次檢查它,然而,我的老闆決定Json(JSONObject)應該很好地工作,因爲我們不打算在不久的將來轉向其他任何東西,我發現從恥辱化角度來看它有問題,事實上我仍然需要記下所有的鍵... – codeScriber