Intereting Posts
Есть ли способ извлечь строковые ресурсы в проекте Android в IntelliJ IDE? Просмотр не привязан к краху оконного менеджера Как отлаживать приложения Android по строкам с помощью Eclipse? Gson NoClassDefFoundError после обновления ADT и SDK Tools до v17 Как остановить активность в android, используя намерение? Внедрение масштабирования и перетаскивания с использованием сборки Android в прослушивании жестов и прослушивании шкалы Включение и выключение GPS программно в Android 4.0 и выше? Разница между getString () и getResources.getString () Вызов метода setEmpty ListView не работает (ничего не отображается, когда список пуст) Android Studio «Open Declaration», как eclipse Передача jsonarray из одной активности в другую Пользовательская версияName значение AndroidManifest.xml в коде Общие сведения о переходах общих элементов exit / reenter Android: удалите левое поле из пользовательского макета панели действий Android: ViewPager и HorizontalScrollVIew

Завершение строительства объекта после десериализации GSON

Я успешно начал использовать GSON для сериализации и де-сериализации иерархии объектов в приложении для Android.

Некоторые из объектов, которые сериализуются, имеют элементы, которые я должен отмечать как transient (или иным образом использовать альтернативные аннотации GSON для предотвращения их сериализации), потому что они являются ссылками на объекты, которые я не хочу сериализовать как часть выходной строки JSON. Эти ссылки относятся к объектам, которые должны быть отдельно построены другими способами.

Как только структура де-сериализована обратно в объекты Java, в какой-то момент мне нужно заполнить эти ссылки. Я мог бы легко сделать это, возможно, используя ряд методов типа setXXX() , но пока это не будет сделано, эти объекты находятся в неполном состоянии. Поэтому я задаюсь вопросом, есть ли более сильный подход к этому.

Способы, о которых я думал до сих пор:

  • Если объекты находятся в неполном состоянии, объекты RuntimeException (или что-то более подходящее); То есть, если их попросят выполнить некоторую работу, когда не был вызван какой-либо метод инициализации.

  • Отделите сериализуемые биты в отдельный объект модели данных. Другими словами, выньте материал, который не может быть сериализован. После де-сериализации GSON создайте мои «реальные» объекты, используя эти объекты данных в их составе. Это, похоже, несколько ухудшает удобство использования GSON.

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

Solutions Collecting From Web of "Завершение строительства объекта после десериализации GSON"

Скорее всего, я возьму второй подход, потому что, как я обычно разрабатываю свои приложения, все, что нужно сериализовать / десериализовать, – это просто простые старые данные или POJO, если вы предпочитаете. Если мне нужно настроить / настроить API сериализации, чтобы делать то, что я хочу, я стараюсь упростить сериализацию, поэтому для API сериализации не нужны дополнительные конфигурации.

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

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

Проверьте https://github.com/julman99/gson-fire

Это библиотека, которую я сделал, которая расширяет Gson для обработки таких случаев, как пост-сериализация и пост-десериализация

Также у него есть много других интересных функций, которые мне нужно со временем с Gson.