Я успешно начал использовать GSON для сериализации и десериализации иерархии объектов в моем приложении Android.
У некоторых из сериализуемых объектов есть члены, которые я должен пометить как transient
(или иначе использовать альтернативные аннотации GSON, чтобы предотвратить их сериализацию), потому что они являются ссылками на объекты, которые я не хочу сериализовать как часть выходной строки JSON. Эти ссылки относятся к объектам, которые должны быть сконструированы отдельно другими способами.
Как только структура десериализуется обратно в объекты Java, в какой-то момент мне нужно заполнить эти ссылки. Я мог бы легко сделать это, возможно, используя серию методов типа setXXX()
, но пока это не сделано, эти объекты находятся в неполном состоянии. Поэтому меня интересует, есть ли более надежный подход к этому.
Пути, о которых я думал до сих пор:
-
Пусть объекты
RuntimeException
(или что-то более подходящее), если они находятся в неполном состоянии; то есть, если их попросили выполнить некоторую работу, когда не был вызван какой-либо метод инициализации. -
Выделите сериализуемые биты в отдельный объект модели данных. Другими словами, выньте вещи, которые не могут быть сериализованы. После десериализации GSON создайте мои "реальные" объекты, используя эти объекты данных в их составе. Похоже, это несколько снижает удобство использования GSON.
-
Напишите специальный десериализатор для GSON, чтобы обрабатывать специальные объекты этих объектов.