2018.10.31
前言
某项目已上线的版本中,将ChildA
类的实例通过ObjectOutputStream#writeObject
12进行序列化并写入HDFS中;而后某个版本中,由于未采用继承的方法,该模块的开发者将功能等价的ChildB
类和ChildA
作为属性封装到TempParent
类中。为了兼容两个版本,使之能正确地反序列化,同时考虑到日后TempParent
类还可能添加其他的属性进行扩展,该作者计划将TempParent
类的实例序列化成Json字符串,再通过instanceOf
是String
还是ChildA
来反序列化。当然这个设计是错误的,在此不讨论设计问题。
方法
在尝试使用Gson#toJson
去序列化TempParent
类实例时,发现该报错,观察发现是因为TempParent
类中有一个ChildB
的属性,而ChildB
类的继承关系如下:
Class BParent {