【问题标题】:java bean \ object to android json objectjava bean \对象到android json对象
【发布时间】:2011-11-14 19:09:57
【问题描述】:

我有一个严重依赖 Json Web 服务的 android 应用程序。 所以我有很多基于json 格式的请求和响应。 基本思想是我有一个获取 bean 对象的请求,例如 HotelSearchData 并且该请求知道如何将该 bean 转换为 json map\ 对象,然后它将 JSONObject 写入网络(使用 http\https)。

我自然需要从json 转换为json。 目前我正在以一种糟糕但快速的方式进行操作:

  1. 获取object
  2. 有一个KEY_XXXX 形式的const 列表,其中xxxx 是键的名称,值是json 对象中的实际键的字符串。
  3. 使用以下示例中的密钥:base.put(KEY_FROM_DATE, hotelSearchData.getFromDate())
  4. 对于 ArrayList\ 数组,我自然而然地使用 JSONArray,就我而言,json 中的每个 {} 都是一个 bean 对象,我需要为它创建一个 bean。

问题是这样,对于未来的发展来说不是那么好(至少......) 每个新请求都需要我新的 bean,其中一些可能在其中包含相同的信息,从而导致信息和代码重复。

每个新请求都需要我创建新的 KEY finals 有时从具有相似密钥的其他请求中复制 - 愚蠢 :-/

对于第一项,除了优化我将要做的事情并将共享代码 bean 分成更小的项目,我可以稍后扩展我看不到任何优雅的解决方案。

但是对于请求\响应,我想到了一些东西,但我不太确定它有多优雅...... 我知道 Google 有一个不同的 json 库,它使用 serialize\deserializeJSONObjects 的反射。我想过使用注释和反射来做serializationdeserializationannotations应该在成员名称相同的情况下有所帮助作为成员值的 json 键。同样对于ArrayList<?>,它的类型没有保存在字节码中,所以编译后不存在,所以你可以指定基本类型或完整的包名。

通过这种方式,一旦我在一些 annotations 的帮助下创建了 bean(可能是 python 脚本 \ant 脚本来自动化其中的一部分?)我可以制作 bean,如果明天我搬到 xml 或其他东西否则 (binary) 我可以创建不同的 serializerdeserializer 并完成它。

我希望听到你对此的看法,或者其他一些解决方案,得到一些启发,我对我目前的代码真的很失望...... :-(

【问题讨论】:

    标签: android json serialization reflection


    【解决方案1】:

    你真的试过gson吗?它会做你需要的事情,除了移动到 XML/二进制部分,但你可以在你的代码中抽象它。任何 XML 序列化库都可能希望使用不同的注释,因此它不会是自动的。

    【讨论】:

    • 是的,我做到了。但是 GSON 不对泛型类型使用注释,它希望你给它数组的 Class 对象,如果你的 json 键名与成员的名字不同,那么,至少在我使用的版本中,你可以' t 使用注释更改键名。我想我可以尝试为 GSON 做出贡献,但我也听到了对其性能的批评。
    • 使用最新版本。使用@SerializedName,您可以将成员的名称更改为您想要的任何名称。 Gson 也很好地支持泛型集合。至于性能,不要根据道听途说做出决定,做一个快速的基准测试,如果它真的比你需要的慢,那么你可以考虑别的。
    • 10 倍。然后我会再检查一次,但是我的老板决定 toJson(JSONObject) 应该可以很好地工作,因为我们不打算在不久的将来转移到其他任何东西,我发现从污名化的角度来看这是有问题的,事实上我仍然需要记下所有的键...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2015-09-10
    相关资源
    最近更新 更多