Java-бин \ объект для Android JSON объект - PullRequest
1 голос
/ 11 сентября 2011

У меня есть приложение для Android, которое сильно зависит от Json Web Services. поэтому у меня много запросов и ответов на основе формата json. Основная идея заключается в том, что у меня есть запрос, который получает объект bean, например HotelSearchData, и запрос знает, как преобразовать этот компонент в json map \ object, а затем записывает это JSONObject в сеть (используя http\https).

естественно мне нужно конвертировать из и в json. Пока я делаю это плохо, но быстро:

  1. получите object
  2. есть список констант в форме KEY_XXXX, где xxxx - это имя ключа, а значение - строка, которая будет фактическим ключом в объекте json.
  3. используйте ключ как в следующем примере: base.put(KEY_FROM_DATE, hotelSearchData.getFromDate())
  4. для ArrayList \ массивов, которые я использую JSONArray, естественно, что каждый {} в json является объектом бина, и мне нужно создать для него бин.

Проблема в том, что этот путь для будущего развития не так хорош (по крайней мере ...) Каждый новый запрос требует от меня новых bean-компонентов, так как некоторые из них могут содержать одну и ту же информацию, что приводит к дублированию информации и коду.

Каждый новый запрос требует от меня создания KEY финалов , иногда копируя из другого запроса с похожими ключами - идиотский: - /

для первого элемента, за исключением оптимизации того, что я собираюсь сделать, и разделения бобов общего кода на более мелкие элементы, которые я могу расширить позже, и не вижу никакого элегантного решения.

Но для запросов \ ответа я что-то думал, но не уверен, насколько это элегантно ... Я знаю, что Google имеет другую библиотеку json, которая использует отражение для serialize\deserialize JSONObject с. Я подумал об использовании аннотаций и рефлексии для выполнения serialization и deserialization, annotation s должны помочь в тех случаях, когда имя элемента NOT совпадает с ключ json для значения члена. также для ArrayList<?>, что его тип не сохраняется в байт-коде и не существует после компиляции, поэтому вы можете указать либо базовый тип, либо полное имя пакета.

Таким образом, как только я создаю bean-компонент с помощью некоторого annotations (может быть, python script \ ant script для автоматизации его части?), Я могу сделать bean-компоненты, которые, если завтра я перейду на xml или что-то еще иначе (binary) Я могу просто создать другой serializer, deserializer и покончить с этим.

Я надеялся услышать ваше мнение об этом или о некоторых других решениях, получить вдохновение, я действительно разочарован своим текущим кодом ...: - (

1 Ответ

2 голосов
/ 11 сентября 2011

Вы действительно пробовали гсон ?Он будет делать то, что вам нужно, кроме перехода на XML / двоичную часть, но вы, вероятно, можете абстрагировать это в своем коде.Скорее всего, любая библиотека сериализации XML может захотеть использовать разные аннотации, поэтому она не будет автоматической.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...