下面列出了com.fasterxml.jackson.databind.SerializerProvider#constructSpecializedType ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
protected JsonSerializer<Object> _findAndAddDynamic(PropertySerializerMap map,
Class<?> type, SerializerProvider provider) throws JsonMappingException
{
JsonSerializer<Object> serializer;
if (_nonTrivialBaseType != null) {
JavaType subtype = provider.constructSpecializedType(_nonTrivialBaseType, type);
serializer = provider.findValueSerializer(subtype, this);
} else {
serializer = provider.findValueSerializer(type, this);
}
NameTransformer t = _nameTransformer;
if (serializer.isUnwrappingSerializer()) {
t = NameTransformer.chainedTransformer(t, ((UnwrappingBeanSerializer) serializer)._nameTransformer);
}
serializer = serializer.unwrappingSerializer(t);
_dynamicSerializers = _dynamicSerializers.newWith(type, serializer);
return serializer;
}
void write(Object val, int containedTypeIndex, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (val != null) {
if (type.containedTypeCount() > containedTypeIndex) {
JsonSerializer<Object> ser;
JavaType containedType = type.containedType(containedTypeIndex);
if (containedType != null && containedType.hasGenericTypes()) {
JavaType st = provider.constructSpecializedType(containedType, val.getClass());
ser = provider.findTypedValueSerializer(st, true, null);
} else {
ser = provider.findTypedValueSerializer(val.getClass(), true, null);
}
ser.serialize(val, gen, provider);
} else {
gen.writeObject(val);
}
} else {
gen.writeNull();
}
}
private JavaType constructSpecializedType(SerializerProvider serializerProvider, JavaType baseType, Class<?> subclass) {
return serializerProvider.constructSpecializedType(baseType, subclass);
}