【发布时间】:2011-11-14 19:09:57
【问题描述】:
我有一个严重依赖 Json Web 服务的 android 应用程序。
所以我有很多基于json 格式的请求和响应。
基本思想是我有一个获取 bean 对象的请求,例如 HotelSearchData 并且该请求知道如何将该 bean 转换为 json map\ 对象,然后它将 JSONObject 写入网络(使用 http\https)。
我自然需要从json 转换为json。
目前我正在以一种糟糕但快速的方式进行操作:
- 获取
object - 有一个
KEY_XXXX形式的const 列表,其中xxxx是键的名称,值是json对象中的实际键的字符串。 - 使用以下示例中的密钥:
base.put(KEY_FROM_DATE, hotelSearchData.getFromDate()) - 对于 ArrayList\ 数组,我自然而然地使用
JSONArray,就我而言,json中的每个{}都是一个 bean 对象,我需要为它创建一个 bean。
问题是这样,对于未来的发展来说不是那么好(至少......) 每个新请求都需要我新的 bean,其中一些可能在其中包含相同的信息,从而导致信息和代码重复。
每个新请求都需要我创建新的 KEY finals 有时从具有相似密钥的其他请求中复制 - 愚蠢 :-/
对于第一项,除了优化我将要做的事情并将共享代码 bean 分成更小的项目,我可以稍后扩展我看不到任何优雅的解决方案。
但是对于请求\响应,我想到了一些东西,但我不太确定它有多优雅......
我知道 Google 有一个不同的 json 库,它使用 serialize\deserializeJSONObjects 的反射。我想过使用注释和反射来做serialization和deserialization,annotations应该在成员名称不相同的情况下有所帮助作为成员值的 json 键。同样对于ArrayList<?>,它的类型没有保存在字节码中,所以编译后不存在,所以你可以指定基本类型或完整的包名。
通过这种方式,一旦我在一些 annotations 的帮助下创建了 bean(可能是 python 脚本 \ant 脚本来自动化其中的一部分?)我可以制作 bean,如果明天我搬到 xml 或其他东西否则 (binary) 我可以创建不同的 serializer、deserializer 并完成它。
我希望听到你对此的看法,或者其他一些解决方案,得到一些启发,我对我目前的代码真的很失望...... :-(
【问题讨论】:
标签: android json serialization reflection