/ / Завершення побудови об’єкта після десеріалізації GSON - java, android, json, gson

Завершення будівництва об'єкта після десеріалізації GSON - java, android, json, gson

Я успішно почав використовувати GSON для серіалізації та десеріалізації ієрархії об’єктів у моїй програмі Android.

У деяких об’єктах, що серіалізуються, є члени, яких я повинен позначити як transient (або іншим чином використовувати альтернативні анотації GSON дозапобігати їх серіалізації), оскільки це посилання на об'єкти, які я не хочу серіалізувати як частину вихідного рядка JSON. Ці посилання стосуються об'єктів, які повинні бути побудовані окремо за допомогою інших засобів.

Після того, як структура буде десеріалізована назад в об'єкти Java, в якийсь момент мені потрібно заповнити ці посилання. Я міг би легко зробити це, можливо, використовуючи серію setXXX() типи методів, але поки цього не буде зроблено, ці об'єкти перебувають у неповному стані. Тому мені цікаво, чи існує до цього більш стійкий підхід.

Досі я думав про те, як:

  • Нехай предмети кидають a RuntimeException (або щось більш підходяще), якщо вони "перебувають у неповному стані; тобто, якщо їх" попросять виконати якусь роботу, коли якийсь метод ініціалізації не був викликаний.

  • Розділіть біти, що піддаються серіалізації, на aокремий об'єкт моделі даних. Іншими словами, вийміть матеріали, які не можуть бути серіалізованими. Після десеріалізації GSON побудуйте мої „реальні” об’єкти, використовуючи ці об’єкти даних у їх складі. Це, здається, дещо перешкоджає зручності використання GSON.

  • Напишіть спеціальний десериалізатор для GSON для спеціального створення цих об’єктів.

Відповіді:

6 за відповідь № 1

Я, швидше за все, піду на другий підхід, тому щооскільки я, як правило, розробляю свої програми, все, що потрібно серіалізувати / десеріалізувати, насправді є просто старими даними або POJO, якщо хочете. Якщо мені здається, що мені потрібно налаштувати / налаштувати API серіалізації, щоб робити те, що я хочу, я схильний спрощувати те, що серіалізується, тому API серіалізації не потребує додаткових конфігурацій.

Отже, якщо у мене є більш складна модель даних,частини яких не слід серіалізувати / десеріалізувати, тоді я витягую з нього простіший набір POJO, як концептуально відокремлену модель даних для участі в серіалізації / десеріалізації. Це справді вимагає додаткового кроку для відображення між двома моделі даних, але це теж досить просто.

Якщо третій підхід є кращим, тоді також зверніть увагу функція Instance Creator, оскільки це може забезпечити ще одну корисну гачку для налаштування процесу десериалізації.


9 для відповіді № 2

Перевірити https://github.com/julman99/gson-fire

Це створена мною бібліотека, яка розширює Gson для обробки таких випадків, як постсеріалізація та постдесеріалізація

Крім того, він має безліч інших цікавих функцій, які мені потрібні були з часом у Gson.