com.fasterxml.jackson.databind

## Interface JsonSerializable

- All Known Implementing Classes:
    ArrayNode, ArrayType, BaseJsonNode, BigIntegerNode, BinaryNode, BooleanNode, CollectionLikeType, CollectionType, ContainerNode, DecimalNode, DoubleNode, FloatNode, IntNode, JsonNode, JSONPObject, JsonSerializable.Base, JSONWrappedObject, LongNode, MapLikeType, MapType, MissingNode, NullNode, NumericNode, ObjectNode, POJONode, RawValue, ReferenceType, ResolvedRecursiveType, ShortNode, SimpleType, TextNode, TypeBase, ValueNode

      public interface JsonSerializable

  Interface that can be implemented by objects that know how to serialize themselves to JSON, using `JsonGenerator` (and `SerializerProvider` if necessary).

  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.

  Note that while it is possible to just directly implement `JsonSerializable`, actual implementations are strongly recommended to instead extend `JsonSerializable.Base`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface and Description
    --- | ---
    `static class` | `JsonSerializable.Base` Base class with minimal implementation, as well as couple of extension methods that core Jackson databinding makes use of.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `serialize(com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider serializers)` Serialization method called when no additional type information is to be included in serialization.
    `void` | `serializeWithType(com.fasterxml.jackson.core.JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer)` Serialization method called when additional type information is expected to be included in serialization, for deserialization to use.

- - ### Method Detail

    - #### serialize

          void serialize(com.fasterxml.jackson.core.JsonGenerator gen,
                       SerializerProvider serializers)
                         throws java.io.IOException

      Serialization method called when no additional type information is to be included in serialization.
      Throws:
        `java.io.IOException`

    - #### serializeWithType

          void serializeWithType(com.fasterxml.jackson.core.JsonGenerator gen,
                               SerializerProvider serializers,
                               TypeSerializer typeSer)
                                 throws java.io.IOException

      Serialization method called when additional type information is expected to be included in serialization, for deserialization to use.

      Usually implementation consists of a call to one of methods in `TypeSerializer` (such as `TypeSerializer.writeTypePrefixForObject(Object, JsonGenerator)`) followed by serialization of contents, followed by another call to `TypeSerializer` (such as `TypeSerializer.writeTypeSuffixForObject(Object, JsonGenerator)`). Exact methods to call in `TypeSerializer` depend on shape of JSON Object used (Array, Object or scalar like String/Number/Boolean).

      Note that some types (most notably, "natural" types: String, Integer, Double and Boolean) never include type information.

      Throws:
        `java.io.IOException`