diff --git a/src/main/java/tools/jackson/databind/ser/BasicSerializerFactory.java b/src/main/java/tools/jackson/databind/ser/BasicSerializerFactory.java index 3acda1deb7..0d387665ee 100644 --- a/src/main/java/tools/jackson/databind/ser/BasicSerializerFactory.java +++ b/src/main/java/tools/jackson/databind/ser/BasicSerializerFactory.java @@ -312,9 +312,9 @@ protected final ValueSerializer findSerializerByPrimaryType(SerializationCont } if (type.isTypeOrSubTypeOf(Number.class)) { + final Class rawType = type.getRawClass(); JsonFormat.Value format = _calculateEffectiveFormat(ctxt, - beanDescRef, Number.class, formatOverrides); - + beanDescRef, rawType, formatOverrides); // 21-May-2014, tatu: Couple of alternatives actually switch (format.getShape()) { case STRING: @@ -323,7 +323,9 @@ protected final ValueSerializer findSerializerByPrimaryType(SerializationCont return null; default: } - return NumberSerializer.instance; + @SuppressWarnings("unchecked") + Class numberType = (Class) rawType; + return new NumberSerializer(numberType); } if (type.isTypeOrSubTypeOf(Map.Entry.class)) { // 18-Oct-2015, tatu: With 2.7, need to dig type info: diff --git a/src/test/java/tools/jackson/databind/ser/jdk/NumberSerTest.java b/src/test/java/tools/jackson/databind/ser/jdk/NumberSerTest.java index 668a8a5f54..1302a91117 100644 --- a/src/test/java/tools/jackson/databind/ser/jdk/NumberSerTest.java +++ b/src/test/java/tools/jackson/databind/ser/jdk/NumberSerTest.java @@ -117,6 +117,7 @@ public void serialize(BigDecimal value, JsonGenerator gen, SerializationContext } } + @SuppressWarnings("serial") static class MyBigDecimal extends BigDecimal { public MyBigDecimal(String value) { super(value);