if (type.getRawClass() == String.class) {
return new ObjectIdDeserializers.ToStringDeserializer();
} else if (type.getRawClass() == byte[].class) {
return new ObjectIdDeserializers.ToByteArrayDeserializer();
} else if (type.getRawClass() == DBRef.class) {
JavaType dbRefType;
if (type.isContainerType()) {
if (type.isCollectionLikeType()) {
dbRefType = type.containedType(0);
} else if (type.isMapLikeType()) {
dbRefType = type.containedType(1);
} else {
return null;
}
} else {
dbRefType = type;
}
JsonDeserializer keyDeserializer = findObjectIdDeserializer(dbRefType
.containedType(1));
return new DBRefDeserializer(dbRefType.containedType(0),
dbRefType.containedType(1), keyDeserializer);
} else if (type.getRawClass() == org.bson.types.ObjectId.class) {
// Don't know why someone would annotated an ObjectId with
// @ObjectId, but handle it
return new ObjectIdDeserializers.ToObjectIdDeserializer();
}