| package org.codehaus.jackson.map.ser.std; |
| |
| import java.io.IOException; |
| import java.lang.reflect.Type; |
| |
| import org.codehaus.jackson.JsonGenerationException; |
| import org.codehaus.jackson.JsonGenerator; |
| import org.codehaus.jackson.JsonNode; |
| import org.codehaus.jackson.map.SerializerProvider; |
| import org.codehaus.jackson.map.JsonMappingException; |
| import org.codehaus.jackson.map.TypeSerializer; |
| import org.codehaus.jackson.map.annotate.JacksonStdImpl; |
| |
| /** |
| * Simple general purpose serializer, useful for any |
| * type for which {@link Object#toString} returns the desired JSON |
| * value. |
| */ |
| @JacksonStdImpl |
| public class ToStringSerializer |
| extends SerializerBase<Object> |
| { |
| /** |
| * Singleton instance to use. |
| */ |
| public final static ToStringSerializer instance = new ToStringSerializer(); |
| |
| /** |
| *<p> |
| * Note: usually you should NOT create new instances, but instead use |
| * {@link #instance} which is stateless and fully thread-safe. However, |
| * there are cases where constructor is needed; for example, |
| * when using explicit serializer annotations like |
| * {@link org.codehaus.jackson.map.annotate.JsonSerialize#using}. |
| */ |
| public ToStringSerializer() { super(Object.class); } |
| |
| @Override |
| public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) |
| throws IOException, JsonGenerationException |
| { |
| jgen.writeString(value.toString()); |
| } |
| |
| /* 01-Mar-2011, tatu: We were serializing as "raw" String; but generally that |
| * is not what we want, since lack of type information would imply real |
| * String type. |
| */ |
| /** |
| * Default implementation will write type prefix, call regular serialization |
| * method (since assumption is that value itself does not need JSON |
| * Array or Object start/end markers), and then write type suffix. |
| * This should work for most cases; some sub-classes may want to |
| * change this behavior. |
| */ |
| @Override |
| public void serializeWithType(Object value, JsonGenerator jgen, SerializerProvider provider, |
| TypeSerializer typeSer) |
| throws IOException, JsonGenerationException |
| { |
| typeSer.writeTypePrefixForScalar(value, jgen); |
| serialize(value, jgen, provider); |
| typeSer.writeTypeSuffixForScalar(value, jgen); |
| } |
| |
| @Override |
| public JsonNode getSchema(SerializerProvider provider, Type typeHint) |
| throws JsonMappingException |
| { |
| return createSchemaNode("string", true); |
| } |
| |
| } |