diff --git a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java index 14c77040..0c949a4b 100644 --- a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java +++ b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java @@ -82,18 +82,22 @@ public void serializeWithType(LocalDate value, JsonGenerator g, { WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, typeSer.typeId(value, serializationShape(provider))); - // need to write out to avoid double-writing array markers - switch (typeIdDef.valueShape) { - case START_ARRAY: - _serializeAsArrayContents(value, g, provider); - break; - case VALUE_NUMBER_INT: - g.writeNumber(value.toEpochDay()); - break; - default: - g.writeString((_formatter == null) ? value.toString() : value.format(_formatter)); + if (typeIdDef == null) { + serialize(value, g, provider); + } else { + // need to write out to avoid double-writing array markers + switch (typeIdDef.valueShape) { + case START_ARRAY: + _serializeAsArrayContents(value, g, provider); + break; + case VALUE_NUMBER_INT: + g.writeNumber(value.toEpochDay()); + break; + default: + g.writeString((_formatter == null) ? value.toString() : value.format(_formatter)); + } + typeSer.writeTypeSuffix(g, typeIdDef); } - typeSer.writeTypeSuffix(g, typeIdDef); } protected void _serializeAsArrayContents(LocalDate value, JsonGenerator g, diff --git a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java index 4fe5e406..e55d44cf 100644 --- a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java +++ b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java @@ -85,17 +85,21 @@ public void serializeWithType(LocalDateTime value, JsonGenerator g, SerializerPr { WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, typeSer.typeId(value, serializationShape(provider))); - // need to write out to avoid double-writing array markers - if (typeIdDef.valueShape == JsonToken.START_ARRAY) { - _serializeAsArrayContents(value, g, provider); + if (typeIdDef == null) { + serialize(value, g, provider); } else { - DateTimeFormatter dtf = _formatter; - if (dtf == null) { - dtf = _defaultFormatter(); + // need to write out to avoid double-writing array markers + if (typeIdDef.valueShape == JsonToken.START_ARRAY) { + _serializeAsArrayContents(value, g, provider); + } else { + DateTimeFormatter dtf = _formatter; + if (dtf == null) { + dtf = _defaultFormatter(); + } + g.writeString(value.format(dtf)); } - g.writeString(value.format(dtf)); + typeSer.writeTypeSuffix(g, typeIdDef); } - typeSer.writeTypeSuffix(g, typeIdDef); } private final void _serializeAsArrayContents(LocalDateTime value, JsonGenerator g,