Object 如何在java.util.ArrayList上添加JsonTypeInfo(注释)

Object 如何在java.util.ArrayList上添加JsonTypeInfo(注释),object,serialization,jersey,jackson,Object,Serialization,Jersey,Jackson,我的POJO: public class Album{ private String title; private Object tracks; // I can not change the type, beyond my control.. /** setter **/ .... /** getter **/ .... } public class Track{ private String title; pr

我的POJO:

public class Album{

    private String title;  
    private Object tracks; // I can not change the type, beyond my control.. 

    /** setter **/
    ....
    /** getter **/
    ....
}

public class Track{

    private String title;  
    private String singer;  

    /** setter **/
    ....
    /** getter **/
    ....
}
主要方法:

public static void main(String[] args)
{
    Album album = new Album ();
    album.setTitle("Thriller");
    Track track = new Track();
    track.setTitle("Beat It");
    track.setSinger("M.J");
    List<Track> trackLst = new ArrayList<Track>();
    trackLst.add(track);
    Album.setTracks(trackLst);

    ObjectMapper mapper = new ObjectMapper();
    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, As.PROPERTY);
    m.writeValue(System.out, album);
}
    /** console printed **/
    {
        "title": "Thriller";
        "tracks":[
            "java.util.ArrayList",
            [
                {
                    "@class":"com.hs.Track",
                    "title":"Beat It",
                    "singer":"M.J"
                }
            ]
        ]
    }        

问题是类型声明
私有对象跟踪
,这会导致属性与定义匹配,并强制使用列表的类型信息。如果声明为
列表
,则不会发生这种情况

您可以使用“混合注释”来关联注释,如:

public class MixIn {
  @JsonDeserialize(as=List.class)
  @JsonSerialize(as=List.class)
  private Object tracks;
}

并注册mix-in以应用于类
相册
。这应该表明预期的类型是
列表
,并避免包含类型信息

谢谢,但曲目并不总是列表,它可以是常规pojo(如曲目),有什么提示吗?更改JSON?我不认为像Java这样的语言使用“List或POJO”这样的联合类型有什么意义;从打字的角度来看,它们很难处理。或者,如果必须的话,编写一个自定义反序列化程序。非常感谢~我想我必须编写一个反序列化程序。
public class MixIn {
  @JsonDeserialize(as=List.class)
  @JsonSerialize(as=List.class)
  private Object tracks;
}