在GSON反序列化之后完成对象构造

Tre*_*vor 16 java android json gson

我已经成功开始使用GSON来序列化和反序列化我的Android应用程序中的对象层次结构.

一些被序列化的对象具有我必须标记为的成员transient(或者使用替代的GSON注释以防止它们被序列化),因为它们是对我不想作为输出JSON字符串的一部分进行序列化的对象的引用.这些引用是指必须通过其他方式单独构造的对象.

一旦将结构反序列化为Java对象,在某些时候我需要填写这些引用.我可以通过使用一系列setXXX()类型方法轻松地做到这一点,但在此之前,这些对象处于不完整状态.因此,我想知道是否有更强大的方法.

到目前为止我想到的方式:

  • 如果物体RuntimeException处于不完整状态,物体会抛出(或更合适的物体); 也就是说,如果在没有调用某些初始化方法时要求他们做一些工作.

  • 将可序列化的位分离为单独的数据模型对象.换句话说,拿出无法序列化的东西.在GSON反序列化之后,使用组合中的这些数据对象构建我的"真实"对象.这似乎在某种程度上打败了使用GSON的便利性.

  • 为GSON编写一个自定义反序列化器来处理这些对象的特殊创建.

小智 10

查看https://github.com/julman99/gson-fire

这是我创建的一个库,它扩展了Gson来处理后序列化和后序列化等案例

此外,它还有许多其他很酷的功能,我需要随着时间的推移与Gson.


Pro*_*uce 6

我可能采取第二种方法,因为我通常设计我的应用程序,任何需要序列化/反序列化的东西实际上只是普通的旧数据,或者如果您愿意,可以使用POJO.如果我发现自己需要自定义/配置序列化API以执行我想要的操作,我倾向于简化序列化的内容,因此序列化API不需要额外的配置.

因此,如果我有一个更复杂的数据模型,其中一部分不是序列化/反序列化的,那么我从中提取一组更简单的POJO,作为一个参与序列化/反序列化的概念上独立的数据模型.这确实需要额外的步骤来映射两个数据模型,但这通常也很简单.

如果第三种方法是首选方法,那么还要注意Instance Creator功能,因为它可以为自定义反序列化过程提供另一个有用的钩子.