Java 序列化多态对象列表时未设置类型Id字段

Java 序列化多态对象列表时未设置类型Id字段,java,json,serialization,jackson,Java,Json,Serialization,Jackson,考虑一下我编写的这段代码,它利用了Jackson对多态序列化/反序列化的支持()- 我的问题是——当我序列化列表时,生成的json中不包含类型字段。但是,如果改用Animal[],则生成的json中会包含一个类型字段。在这两种情况下,反序列化都可以正常工作,即使用正确的子类。有人能解释这种行为的原因吗?要使用多态序列化来序列化泛型集合,您需要执行以下操作: mapper.writerFor(new TypeReference<List<Animal>>() {}).wri

考虑一下我编写的这段代码,它利用了Jackson对多态序列化/反序列化的支持()-


我的问题是——当我序列化列表时,生成的json中不包含类型字段。但是,如果改用Animal[],则生成的json中会包含一个类型字段。在这两种情况下,反序列化都可以正常工作,即使用正确的子类。有人能解释这种行为的原因吗?

要使用多态序列化来序列化泛型集合,您需要执行以下操作:

mapper.writerFor(new TypeReference<List<Animal>>() {}).writeValueAsString(unmarshalledList));
mapper.writer(新类型引用
Dog
Cat
[ {
  "name" : "cookie",
  "barkLevel" : 5
}, {
  "name" : "misty",
  "meowLevel" : 3
} ]

Dog
Cat
[ {
  "type" : "dog",
  "name" : "cookie",
  "barkLevel" : 5
}, {
  "type" : "cat",
  "name" : "misty",
  "meowLevel" : 3
} ]
mapper.writerFor(new TypeReference<List<Animal>>() {}).writeValueAsString(unmarshalledList));