7

私はこの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

私は何か間違ったことをしていますか?または、これは予想される動作ですか?サブタイプを推測するために使用されるプロパティは、逆シリアル化中に破棄されますか?

4

2 に答える 2

21

visible = true を設定する必要があります。

@JsonTypeInfo(
    use= JsonTypeInfo.Id.NAME,
    include=JsonTypeInfo.As.PROPERTY,
    property="category",
    visible = true
)
于 2014-04-04T20:38:19.450 に答える
2

はい、カテゴリ プロパティは、注釈で宣言されているように、返されるオブジェクトの型を決定するために使用されます。逆シリアル化されたオブジェクトにそのプロパティを引き続き使用したい場合は、型識別のために別のプロパティを追加するか、この投稿の例 6 のように型要素なしで逆シリアル化を記述できます。

于 2013-02-05T22:01:36.093 に答える