这个
Playlist
类实现
Map<String, Object>
.Jackson将子对象反序列化为
LinkedHashMap
然后打电话
Map.put()
.这会引发异常,因为
地图put()
实现正在尝试分配
LinkedHashMap
到另一种类型的字段。杰克逊打来电话
地图put()
因为它使用的是
MapDeserializer
.如何更改反序列化程序以避免调用
地图put()
?
我想如果我告诉Jackson使用
BeanDeserializer
而不是
映射反序列化程序
,那么一切都将毫无问题地反序列化。有更好的办法吗?
尝试#1
我创造了一个
JsonDeserializer
并超越
deserialize()
使用此代码:
return BeanDeserializerFactory.instance.
createBeanDeserializer(context, m_type, m_description).
deserialize(parser, context);
不幸的是,这会
com.fasterxml.jackson.databind.exc.MismatchedInputException: No _valueDeserializer assigned
1.我不知道如何分配
_valueDeserializer
.
尝试#2
然后我创建了一个
BeanDeserializerModifier
并超越
modifyMapDeserializer()
使用此代码:
DeserializationContext context;
if (!type.equals(m_type))
{
return deserializer;
}
context = ??????;
try
{
return BeanDeserializerFactory.instance.createBeanDeserializer(context, type, beanDesc);
}
catch (JsonMappingException caught)
{
throw new UncheckedIOException(caught);
}
不幸的是,我不知道如何获得
DeserializationContext
.