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方法。