package com.github.czyzby.websocket.serialization.impl; import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.JsonWriter.OutputType; import com.github.czyzby.websocket.serialization.SerializationException; /** Default object serializer. Uses {@link Json} to serialize object to strings. * * @author MJ */ public class JsonSerializer extends AbstractStringSerializer { private final Json json = new Json(); public JsonSerializer() { json.setOutputType(OutputType.javascript); } /** @param preserveClassName if true, object's class name will be added to the JSON representation under "class" * key. If false, class data will not be preserved. Default to true. Note that if you set this value to * false, deserialization might fail or return {@link com.badlogic.gdx.utils.JsonValue} instead of * instance of the actual serialized object. Set to false only if you don't need the class data or your * server is not using the same serialization and does not need class data. */ public void setPreserveClassName(final boolean preserveClassName) { json.setTypeName(preserveClassName ? "class" : null); } @Override public String serializeAsString(final Object object) { try { return json.toJson(object, Object.class); } catch (final Exception exception) { throw new SerializationException("Unable to serialize object to JSON.", exception); } } @Override public Object deserialize(final String data) { try { return json.fromJson(null, data); } catch (final Exception exception) { throw new SerializationException("Unable to deserialize object from JSON.", exception); } } /** @return direct reference to the {@link Json} serializer, which can be used to change serialization settings. */ public Json getJson() { return json; } }