Java 反序列化顶级对象中id类型为的子对象
我正在使用Jackson尝试反序列化此数据结构:Java 反序列化顶级对象中id类型为的子对象,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我正在使用Jackson尝试反序列化此数据结构: { "type": "foo", // or "bar", "baz", etc "name": "number 1", "params": { // parameters specific to type 'foo' } } 我知道我可以使用自定义反序列化程序,但我想知道是否可以仅使用@JsonType*注释族来实现这一点 现在我的课程设置如下: public class TopLevelObject {
{
"type": "foo", // or "bar", "baz", etc
"name": "number 1",
"params": {
// parameters specific to type 'foo'
}
}
我知道我可以使用自定义反序列化程序,但我想知道是否可以仅使用@JsonType*
注释族来实现这一点
现在我的课程设置如下:
public class TopLevelObject {
String type;
String name;
AbstractParams params;
}
public class FooParams extends AbstractParams {
String one;
String two;
}
public class BarParams extends AbstractParams {
String three;
String four;
}
abstract public class AbstractParams {
}
如果我将属性移动到AbstractParams
类中,我可以在type
属性上使用@JsonTypeInfo
,但是在TopLevelObject
中保留type
属性时,我似乎无法获得相同的结果
有什么想法吗?可以使用
@JsonTypeInfo(use=Id.NAME,include=As.EXTERNAL\u属性)
。但是,As.EXTERNAL\u属性
只能用于属性
因此,您必须将@JsonTypeInfo
注释放在TopLevelObject
类的AbstractParams
字段/setter上
class TopLevelObject {
public String type;
public String name;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include= JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = FooParams.class, name = "foo"),
@JsonSubTypes.Type(value = BarParams.class, name = "bar")})
public AbstractParams params;
}
可以使用
@JsonTypeInfo(use=Id.NAME,include=As.EXTERNAL\u属性)
。但是,As.EXTERNAL\u属性
只能用于属性
因此,您必须将@JsonTypeInfo
注释放在TopLevelObject
类的AbstractParams
字段/setter上
class TopLevelObject {
public String type;
public String name;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include= JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = FooParams.class, name = "foo"),
@JsonSubTypes.Type(value = BarParams.class, name = "bar")})
public AbstractParams params;
}
太好了,这正是我想要的!非常感谢。太好了,这正是我想要的!非常感谢。