У меня есть приложение для Android, которое сильно зависит от Json Web Services.
поэтому у меня много запросов и ответов на основе формата json
.
Основная идея заключается в том, что у меня есть запрос, который получает объект bean, например HotelSearchData
, и запрос знает, как преобразовать этот компонент в json map \ object, а затем записывает это JSONObject
в сеть (используя http\https
).
естественно мне нужно конвертировать из и в json
.
Пока я делаю это плохо, но быстро:
- получите
object
- есть список констант в форме
KEY_XXXX
, где xxxx
- это имя ключа, а значение - строка, которая будет фактическим ключом в объекте json
.
- используйте ключ как в следующем примере:
base.put(KEY_FROM_DATE, hotelSearchData.getFromDate())
- для 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
и покончить с этим.
Я надеялся услышать ваше мнение об этом или о некоторых других решениях, получить вдохновение, я действительно разочарован своим текущим кодом ...: - (