Java 将超类委托给默认解析器的GSON类型适配器

Java 将超类委托给默认解析器的GSON类型适配器,java,json,gson,Java,Json,Gson,设想以下类层次结构: 所有类型之母 public abstract class AbstractSuperType { private String id; private long time; } 基本用户类型 public abstract class AbstractUserItem extends AbstractSuperType { private String uid; private String name; } 独立用户数据类型1 public

设想以下类层次结构:

所有类型之母

public abstract class AbstractSuperType {
   private String id;
   private long time;
}
基本用户类型

public abstract class AbstractUserItem extends AbstractSuperType {
    private String uid;
    private String name;
}
独立用户数据类型1

public class UserItemType1 extends AbstractUserItem {
    private EnumType type;
    private String typeValue;
}
下面是一个JSON示例:

{
  "id":"12345aabc",
  "time":123456789012,
  "uid":"cca112233",
  "name":"Bob Jones"
  "a":2,
  "b":3.12345,
  "c": { some_special_value }
}
EnumType
字段不是在JSON中声明的,而是取决于存在哪些键。
typeValue
字段也基于解析的
EnumType
填充(例如,如果JSON中存在键a和键b,则它是
type1
数据,其值位于键c中

我在解析时遇到了一些问题:我可以解析
EnumType
typeValue
很好,但是我不想手工解析层次结构的其余部分,因为

  • 默认解析器做得很好
  • 如果基本对象发生更改,我也必须更新此代码
  • 我的问题是:是否有办法将前两层委托给默认解析器,然后接管并执行自定义解析?

    谢谢

    答案基本上是:“不”。如果这两个超类不是抽象的,您可以选择通过
    JsonDeserializationContext
    在反序列化程序中使用Gson,并将它们反序列化为直接超类的实例。如果这是您真正需要的,您可能应该考虑组合而不是继承。例如,decorator模式ple,可能有用。谢谢。我可以始终在对象中包含所有这些值,并将确定逻辑移动到getter和setter方法。