我已经成功开始使用 GSON 序列化和反序列化我的 Android 应用程序中的对象层次结构。
一些被序列化的对象具有我必须标记为的成员transient
(或者使用替代的 GSON 注释来防止它们被序列化),因为它们是对我不想序列化为输出 JSON 字符串的一部分的对象的引用。这些引用指向必须通过其他方式单独构造的对象。
一旦结构被反序列化回 Java 对象,在某些时候我需要填写这些引用。我可以通过使用一系列setXXX()
类型方法轻松地做到这一点,但在完成之前,这些对象处于不完整状态。因此,我想知道是否有更强大的方法来解决这个问题。
到目前为止我想到的方法:
如果对象处于不完整状态,则让对象抛出
RuntimeException
(或更合适的);也就是说,如果在未调用某些初始化方法时要求他们做一些工作。将可序列化位分离到单独的数据模型对象中。也就是说,把不能序列化的东西拿出来。在 GSON 反序列化之后,使用组合中的这些数据对象构建我的“真实”对象。这似乎在某种程度上破坏了使用 GSON 的便利性。
为 GSON 编写一个自定义反序列化器来处理这些对象的特殊创建。