1package com.fasterxml.jackson.databind.ser.std;
2
3import java.io.IOException;
4import java.util.Calendar;
5import java.util.Date;
6
7import com.fasterxml.jackson.core.*;
8import com.fasterxml.jackson.databind.*;
9import com.fasterxml.jackson.databind.ser.impl.PropertySerializerMap;
10import com.fasterxml.jackson.databind.util.EnumValues;
11
12@SuppressWarnings("serial")
13public class StdKeySerializers
14{
15 protected final static JsonSerializer<Object> DEFAULT_KEY_SERIALIZER = new StdKeySerializer();
16
…lines 17–76 unchanged (60 lines)
77 // 11-Aug-2016, tatu: Turns out we get this if `EnumMap` is the root value because
78 // then there is no static type
79 if (rawKeyType == Enum.class) {
80 return new Dynamic();
81 }
82 if (rawKeyType.isEnum()) {
83 return EnumKeySerializer.construct(rawKeyType,
84 EnumValues.constructFromName(config, (Class<Enum<?>>) rawKeyType));
85 }
86 }
87 return DEFAULT_KEY_SERIALIZER;
88 }
89
90 /**
…lines 91–210 unchanged (120 lines)
211
212 /**
213 * Specialized instance to use for Enum keys, as per [databind#1322]
214 *
215 * @since 2.8
216 */
217 public static class EnumKeySerializer extends StdSerializer<Object>
218 {
219 protected final EnumValues _values;
220
221 protected EnumKeySerializer(Class<?> enumType, EnumValues values) {
222 super(enumType, false);
223 _values = values;
224 }
225
226 public static EnumKeySerializer construct(Class<?> enumType,
227 EnumValues enumValues)
228 {
229 return new EnumKeySerializer(enumType, enumValues);
230 }
231
232 @Override
233 public void serialize(Object value, JsonGenerator g, SerializerProvider serializers)
234 throws IOException
235 {
236 if (serializers.isEnabled(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)) {
237 g.writeFieldName(value.toString());
238 return;
239 }
240 Enum<?> en = (Enum<?>) value;
241 g.writeFieldName(_values.serializedValueFor(en));
242 }
243 }
244}
245