我有这个JSON模型类,
public class Response {
@JsonTypeInfo(use= JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="category")
@JsonSubTypes({
@Type(value = Series.class, name = "Series"),
@Type(value = Movies.class, name = "Movies")})
public static abstract class Asset {
public String category;
public String id;
}
public static class Series extends Asset {
public String seriesName;
public int seasonNumber;
}
public static class Movies extends Asset {
public String movieName;
}
public Asset[] assets;
}
当我尝试反序列化以下JSON时,
{
assets: [
{
"category": "Series",
"id": "ID1",
"seriesName": "SeriesName1",
"seasonNumber": 1
},
{
"category": "Movies",
"id": "ID2",
"movieName": "MovieName1"
}
]
}
我看到所有属性都已正确反序列化,但category
属性除外,它们在两种资产类型中均为null
。
我做错了吗?或者这是预期的行为 - 在反序列化期间丢弃用于推断子类型的属性?
答案 0 :(得分:18)
您需要设置visible = true:
@JsonTypeInfo(
use= JsonTypeInfo.Id.NAME,
include=JsonTypeInfo.As.PROPERTY,
property="category",
visible = true
)
答案 1 :(得分:2)
是的,category属性用于确定注释中声明的返回对象的类型。如果您仍希望在反序列化对象中具有该属性,则可以添加另一个属性以进行类型区分,或者编写不带类型元素的反序列化,如此示例中的post所示。