Intereting Posts
Отладка Android Studio для doInBackground кода AsyncTask Android: получение повернутой карты OSM для заполнения всего экрана Причины, что принятое намерение будет NULL в onStartCommand LinearLayout vs RelativeLayout Google Analytics на Android дает продолжительность сеанса Avg: 00:00:00 Синяя точка и круг не отображаются в MyLocation с использованием сплайсированного аффилированного местоположения api ViewPager + FragmentStatePagerAdapter + изменение ориентации Установить выбранный индекс Android RadioGroup Какое событие я должен использовать для отправки события «нажатие кнопки» в Firebase Analytics Как открыть камеру непосредственно в режиме панорамы / фотосферы? Панель состояния Android и панель действий Android: Использование планшета для эмуляции других устройств? ListView, SimpleCursorAdapter, фильтр EditText – почему он ничего не сделает? Как использовать дизайн материалов в приложении для Android? Android Studio Project говорит, что проект уже включен в GitHub, несмотря на то, что я удалил репозиторий.

Завершение строительства объекта после десериализации 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.