Example usage for com.google.gson.internal.bind TypeAdapters STRING

List of usage examples for com.google.gson.internal.bind TypeAdapters STRING

Introduction

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

Prototype

TypeAdapter STRING

To view the source code for com.google.gson.internal.bind TypeAdapters STRING.

Click Source Link

Usage

From source file:com.flipkart.batching.gson.adapters.BatchingTypeAdapters.java

License:Open Source License

private static void write(Gson gson, JsonWriter out, @Nullable Object value) throws IOException {
    if (value == null) {
        out.nullValue();/*from   w w w.j a  va 2  s .  c o m*/
    } else if (value instanceof JSONObject) {
        getJSONObjectTypeAdapter(gson).write(out, (JSONObject) value);
    } else if (value instanceof JSONArray) {
        getJSONArrayTypeAdapter(gson).write(out, (JSONArray) value);
    } else if (value instanceof String) {
        TypeAdapters.STRING.write(out, (String) value);
    } else if (value instanceof Number) {
        TypeAdapters.NUMBER.write(out, (Number) value);
    } else if (value instanceof Boolean) {
        TypeAdapters.BOOLEAN.write(out, (Boolean) value);
    } else {
        gson.toJson(value, value.getClass(), out);
    }
}

From source file:com.flipkart.batching.gson.RuntimeTypeAdapterFactory.java

License:Open Source License

public <R> TypeAdapter<R> create(Gson gson, TypeToken<R> type) {
    if (type.getRawType() != baseType) {
        return null;
    }/*from   w  w  w . j a va 2  s  .co m*/

    final Map<String, TypeAdapter<?>> labelToDelegate = new LinkedHashMap<>();
    final Map<Class<?>, TypeAdapter<?>> subtypeToDelegate = new LinkedHashMap<>();

    for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) {
        TypeAdapter<?> delegate = labelToTypeAdapter.get(entry.getKey());
        if (delegate == null) {
            delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue()));
        }
        labelToDelegate.put(entry.getKey(), delegate);
        subtypeToDelegate.put(entry.getValue(), delegate);
    }

    return new TypeAdapter<R>() {
        @Override
        public R read(JsonReader reader) throws IOException {

            if (reader.peek() == com.google.gson.stream.JsonToken.NULL) {
                reader.nextNull();
                return null;
            }
            if (reader.peek() != com.google.gson.stream.JsonToken.BEGIN_OBJECT) {
                reader.skipValue();
                return null;
            }
            reader.beginObject();

            String label = null;
            R result = null;
            while (reader.hasNext()) {
                String name = reader.nextName();
                com.google.gson.stream.JsonToken jsonToken = reader.peek();
                if (jsonToken == com.google.gson.stream.JsonToken.NULL) {
                    reader.skipValue();
                    continue;
                }
                switch (name) {
                case "type":
                    label = TypeAdapters.STRING.read(reader);
                    break;
                case "value":
                    @SuppressWarnings("unchecked") // registration requires that subtype extends T
                    TypeAdapter<R> delegate = label == null ? null
                            : (TypeAdapter<R>) labelToDelegate.get(label);
                    if (delegate == null) {
                        throw new JsonParseException("cannot deserialize " + baseType + " subtype named "
                                + label + "; did you forget to register a subtype?");
                    }
                    result = delegate.read(reader);
                    break;
                default:
                    reader.skipValue();
                    break;
                }
            }

            reader.endObject();
            return result;
        }

        @Override
        public void write(JsonWriter out, R value) throws IOException {
            Class<?> srcType = value.getClass();
            @SuppressWarnings("unchecked") // registration requires that subtype extends T
            TypeAdapter<R> delegate = (TypeAdapter<R>) subtypeToDelegate.get(srcType);
            if (delegate == null) {
                throw new JsonParseException(
                        "cannot serialize " + srcType.getName() + "; did you forget to register a subtype?");
            }
            String label = subtypeToLabel.get(srcType);
            out.beginObject();

            out.name("type");
            out.value(label);

            out.name("value");
            delegate.write(out, value);

            out.endObject();
        }
    }.nullSafe();
}