Example usage for com.google.gson.internal.bind JsonTreeWriter get

List of usage examples for com.google.gson.internal.bind JsonTreeWriter get

Introduction

In this page you can find the example usage for com.google.gson.internal.bind JsonTreeWriter get.

Prototype

public JsonElement get() 

Source Link

Document

Returns the top level object produced by this writer.

Usage

From source file:com.gilecode.yagson.YaGson.java

License:Apache License

/**
 * This method serializes the specified object into its equivalent Json representation as a tree of
 * {@link JsonElement}s, given that the de-serialization type is known.
 * <p/>/*from w  w w .  jav a  2  s  .  c o  m*/
 * The root type information is emitted only if necessary, i.e. if the specified de-serialization type differs from
 * the actual object's class. It is guaranteed that the resulting string may be de-serialized to the similar object
 * using {@code fromJson(json, deserializationType)}, unless some YaGson's features are disabled.
 *
 * @param src       the object for which JSON representation is to be created
 * @param deserializationType The type which will be used for de-serialization of the resulting JSON representation
 * @return Json representation of {@code src}
 */
@Override
public JsonElement toJsonTree(Object src, Type deserializationType) {
    if (src == null) {
        return JsonNull.INSTANCE;
    }

    boolean isRootTypeRequired = TypeUtils.isTypeInfoRequired(src.getClass(), deserializationType, false);
    JsonTreeWriter writer = new JsonTreeWriter();
    super.toJson(src, src.getClass(), writer, isRootTypeRequired);
    return writer.get();
}

From source file:edu.mit.media.funf.config.DefaultRuntimeTypeAdapterFactory.java

License:Open Source License

@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
    if (baseClass.isAssignableFrom(type.getRawType())) {
        return new TypeAdapter<T>() {
            @Override// w w w  .j  a  v  a 2  s.c o  m
            public void write(JsonWriter out, T value) throws IOException {
                if (value == null) {
                    out.nullValue();
                    return;
                }
                // TODO: cache these only once per runtime type
                final TypeAdapter delegate = delegateFactory.create(gson, TypeToken.get(value.getClass()));
                JsonTreeWriter treeWriter = new JsonTreeWriter();
                delegate.write(treeWriter, value);
                JsonElement el = treeWriter.get();

                if (el.isJsonObject()) {
                    JsonObject elObject = el.getAsJsonObject();
                    elObject.addProperty(RuntimeTypeAdapterFactory.TYPE, value.getClass().getName());
                    Streams.write(elObject, out);
                } else {
                    Streams.write(el, out);
                }
            }

            @Override
            public T read(JsonReader in) throws IOException {
                // TODO: need to handle null
                JsonElement el = Streams.parse(in);
                Class<? extends T> runtimeType = getRuntimeType(el, type);
                if (runtimeType == null) {
                    throw new ParseException("RuntimeTypeAdapter: Unable to parse runtime type.");
                }
                // TODO: cache these only once per runtime type
                final TypeAdapter<? extends T> delegate = delegateFactory.create(gson,
                        TypeToken.get(runtimeType));

                if (el.isJsonPrimitive() && el.getAsJsonPrimitive().isString()) {
                    JsonObject typeObject = new JsonObject();
                    typeObject.addProperty(TYPE, el.getAsString());
                    el = typeObject;
                }

                return delegate.read(new JsonTreeReader(el));
            }

        };
    }
    return null;
}