我有一个严重依赖Json Web Services的Android应用程序。所以我有很多基于json
格式的请求和响应。基本思想是我有一个请求,它获取了一个 bean 对象,例如 HotelSearchData
并且该请求知道如何将该 bean 转换为 json map\ 对象,然后将该JSONObject
写入网络(使用 httphttps
(。
自然我需要从json
转换和转换.目前,我以一种糟糕但快速的方式做到这一点:
- 获取
object
- 有一个
KEY_XXXX
形式的 const 列表,其中xxxx
是键的名称,值是字符串,该字符串将成为json
对象中的实际键。 - 使用密钥,如以下示例所示:
base.put(KEY_FROM_DATE, hotelSearchData.getFromDate())
- 对于我自然使用的 ArrayList\ 数组
JSONArray
,就我而言,json
中的每个{}
都是一个 bean 对象,我需要为它创建一个 bean。
问题是这样,对于未来的发展不是那么好(至少......每个新请求都需要我新的 bean,其中一些可能内部具有相同的信息,从而导致信息和代码重复。
每个新请求都需要我创建新的 KEY final,有时从具有类似键的其他请求复制 - 愚蠢 :-/
对于第一项,除了优化我将要做的事情并将共享代码 bean 划分为我可以稍后扩展的较小项目之外,我看不到任何优雅的解决方案。
但是对于请求\响应,我想到了一些东西,但我不确定它有多优雅......我知道谷歌有一个不同的json库,它使用反射来serializedeserialize
JSONObject
s。我想使用注释和反射来做serialization
和deserialization
,在成员名称与成员值的 json 键不同的情况下,annotation
应该会有所帮助。此外,对于ArrayList<?>
,它的类型未保存在字节码中,因此在编译后不存在,因此您可以指定基本类型或完整的包名称。
这样,一旦我在某些annotations
的帮助下创建了 bean(也许python
脚本 \ant 脚本来自动化它的一部分?我可以做豆子,如果明天我搬到xml
或其他东西(binary
(,我可以创造不同的serializer
,deserializer
并完成它。
我希望听到你对它的意见,或者其他一些解决方案,得到一些灵感,我对我当前的代码真的很失望...... :-(
你真的试过gson吗?它将完成您需要的事情,除了移动到 XML/二进制部分,但您可能会在代码中抽象它。任何 XML 序列化库都可能希望使用不同的注释,因此它不会是自动的。