# Interface Mapper.Direct<T>

Enclosing interface:
  `Mapper<T>`

public static interface Mapper.Direct<T>

Optional: append `instance` as JSON directly, without building a map first.

A generated mapper knows every property name and type at build time, so it can append them in order rather than filling a `LinkedHashMap` -- with a hash per key -- and having the writer walk it back rediscovering each value's type. On a small object that map round trip is the majority of the serialisation cost, not the escaping.

Measured through `Mappers#toJson` on a four-property object, output asserted identical: 2.05x / 1.51x / 2.81x faster (263 -> 128, 214 -> 142, 224 -> 80 ns per call).

That measurement ran on Java SE, so the map it avoids is the JDK's LinkedHashMap. On a translated device build the map is `vm/JavaAPI`'s, which overrides the natives HashMap gets and costs about 1.5x a HashMap to build -- so the saving there is at least this, not less.

Implemented as a separate interface rather than a method on `Mapper` so hand-written mappers keep compiling; `Mappers#toJson` uses it when the mapper offers it and falls back to `toMap` when it does not.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `toJson(T instance, StringBuilder out)`
  Appends `instance` as a JSON value -- an object, or the four characters `null`.

- ## Method Details

  - ### toJson

    void toJson(T instance, StringBuilder out)
    Appends `instance` as a JSON value -- an object, or the four characters `null`. Must produce exactly what `JSONWriter.toJson(toMap(instance))` would.