package com.fasterxml.jackson.databind;
import java.io.
IOException;
import com.fasterxml.jackson.
core.*;
import com.fasterxml.jackson.databind.
jsontype.
TypeSerializer;
/**
* Interface that can be implemented by objects that know how to
* serialize themselves to JSON, using {@link JsonGenerator}
* (and {@link SerializerProvider} if necessary).
*<p>
* Note that implementing this interface binds implementing object
* closely to Jackson API, and that it is often not necessary to do
* so -- if class is a bean, it can be serialized without
* implementing this interface.
*<p>
* NOTE: Jackson 2.0 added another method (from former "JsonSerializableWithType"),
* which is required for proper handling of case where additional type information
* is needed.
*/
public interface
JsonSerializable
{
/**
* Serialization method called when no additional type information is
* to be included in serialization.
*/
public void serialize(
JsonGenerator jgen,
SerializerProvider provider)
throws
IOException,
JsonProcessingException;
/**
* Serialization method called when additional type information is
* expected to be included in serialization, for deserialization to use.
*<p>
* Usually implementation consists of a call to one of methods
* in {@link TypeSerializer} (such as {@link TypeSerializer#writeTypePrefixForObject(Object, JsonGenerator)})
* followed by serialization of contents,
* followed by another call to {@link TypeSerializer}
* (such as {@link TypeSerializer#writeTypeSuffixForObject(Object, JsonGenerator)}).
* Exact methods to call in {@link TypeSerializer} depend on shape of JSON Object used
* (Array, Object or scalar like String/Number/Boolean).
*<p>
* Note that some types (most notably, "natural" types: String, Integer,
* Double and Boolean) never include type information.
*/
public void serializeWithType(
JsonGenerator jgen,
SerializerProvider provider,
TypeSerializer typeSer)
throws
IOException,
JsonProcessingException;
}