Skip to content

Commit 9e581bb

Browse files
Merge pull request #195 from aarondav/tuple
Close #194, allow deserialization of tuples contianing abstract types
2 parents 1957b5c + bbe10e8 commit 9e581bb

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/deser/TupleDeserializerModule.scala

+6-4
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ private class TupleDeserializer(javaType: JavaType,
3131

3232
val paramDesers = paramTypes map (ctxt.findContextualValueDeserializer(_, property))
3333

34-
val typeDesers = Option(property).map { p =>
34+
val typeDesers: Seq[TypeDeserializer] = {
3535
val factory = BeanDeserializerFactory.instance
36-
paramTypes map { pt =>
37-
factory.findPropertyTypeDeserializer(ctxt.getConfig, pt, property.getMember)
36+
if (property != null) {
37+
paramTypes map (factory.findPropertyTypeDeserializer(ctxt.getConfig, _, property.getMember))
38+
} else {
39+
paramTypes map (factory.findTypeDeserializer(config, _))
3840
}
39-
} getOrElse Stream.fill(paramTypes.size)(null)
41+
}
4042

4143
new TupleDeserializer(javaType, config, paramDesers, typeDesers)
4244
}

src/test/scala/com/fasterxml/jackson/module/scala/deser/TupleDeserializerTest.scala

+7
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,11 @@ class TupleDeserializerTest extends DeserializerTest {
7575
val result = deserialize[TupleContainer](json)
7676
result should be (value)
7777
}
78+
79+
it should "deserialize using type information outside of field" in {
80+
val value = (TupleValueLong(1), TupleValueString("foo"))
81+
val json = mapper.writeValueAsString(value)
82+
val result = deserialize[(TupleValueBase, TupleValueBase)](json)
83+
result should be (value)
84+
}
7885
}

0 commit comments

Comments
 (0)