private <S> void writeObject(S value, JsonWriter out) throws IOException { if (value != null) { JsonObject jsonObject = new JsonObject(); jsonObject.add(OBJECT_TYPE, new JsonPrimitive(value.getClass().getName())); TypeAdapter<S> delegate = (TypeAdapter<S>) this.gson.getDelegateAdapter(this.factory, TypeToken.get(value.getClass())); jsonObject.add(OBJECT_DATA, delegate.toJsonTree(value)); Streams.write(jsonObject, out); } else { out.nullValue(); } }
private <S> S readValue(JsonObject jsonObject, TypeToken<S> defaultTypeToken) throws IOException { try { TypeToken<S> actualTypeToken; if (jsonObject.isJsonNull()) { return null; } else if (jsonObject.has(OBJECT_TYPE)) { String className = jsonObject.get(OBJECT_TYPE).getAsString(); Class<S> klazz = (Class<S>) Class.forName(className); actualTypeToken = TypeToken.get(klazz); } else if (defaultTypeToken != null) { actualTypeToken = defaultTypeToken; } else { throw new IOException("Could not determine TypeToken."); } TypeAdapter<S> delegate = this.gson.getDelegateAdapter(this.factory, actualTypeToken); S value = delegate.fromJsonTree(jsonObject.get(OBJECT_DATA)); return value; } catch (ClassNotFoundException cnfe) { throw new IOException(cnfe); } }
@SuppressWarnings("unchecked") @Override public void write(JsonWriter out, R value) throws IOException { Class<?> valueClass = value.getClass(); String valueTypeName = valueClass.getName(); TypeToken<?> valueType = TypeToken.get(valueClass); TypeAdapter<R> delegate = (TypeAdapter<R>) gson.getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType); if (delegate == null) { throw new JsonParseException("Could not serialize " + valueClass.getName()); } JsonElement jsonElement = delegate.toJsonTree(value); if (valueClass != baseClass) { JsonObject jsonObject = jsonElement.getAsJsonObject(); JsonObject clone = new JsonObject(); clone.add(TYPE_FIELD_NAME, new JsonPrimitive(valueTypeName)); for (Map.Entry<String, JsonElement> e : jsonObject.entrySet()) { clone.add(e.getKey(), e.getValue()); } Streams.write(clone, out); } else { Streams.write(jsonElement, out); } }
gson.getDelegateAdapter(PolymorphicTypeAdapterFactory.this, valueType);
new LinkedHashMap<Class<?>, TypeAdapter<?>>(); for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) { TypeAdapter<?> delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); labelToDelegate.put(entry.getKey(), delegate); subtypeToDelegate.put(entry.getValue(), delegate);
= new LinkedHashMap<Class<?>, TypeAdapter<?>>(); for (Map.Entry<String, Class<?>> entry : labelToSubtype.entrySet()) { TypeAdapter<?> delegate = gson.getDelegateAdapter(this, TypeToken.get(entry.getValue())); labelToDelegate.put(entry.getKey(), delegate); subtypeToDelegate.put(entry.getValue(), delegate);
@Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { boolean hasAdapter; try { TypeAdapter<T> adapter = gson.getDelegateAdapter(this, type); hasAdapter = !isReflectiveTypeAdapter(adapter); } catch (IllegalArgumentException e) { hasAdapter = false; } if (hasAdapter) { return null; } try { @SuppressWarnings("unchecked") Codec<T> codec = (Codec<T>) registry.get(type.getRawType()); return typeAdapterFromCodec(codec); } catch (CodecConfigurationException e1) { return null; } } };
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(Excluder.this, type)); } };
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(skipPast, typeToken)); }
TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type); TypeAdapter<?> elementAdapter = gson.getAdapter( TypeToken.get(parameterizedType.getActualTypeArguments()[0]));
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(skipPast, typeToken)); }
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(Excluder.this, type)); } };
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(skipPast, typeToken)); }
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(skipPast, typeToken)); }
private TypeAdapter<T> delegate() { TypeAdapter<T> d = delegate; return d != null ? d : (delegate = gson.getDelegateAdapter(Excluder.this, type)); } };
public <T> TypeAdapter<T> create(Gson gson, final TypeToken<T> type) { if(type.getType != Item.class) { // Do not use custom adapter for other types return null; } final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type); final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class); return new TypeAdapter<T>() { // your adapter code }
@Override protected TypeAdapter<ConstructModel> getDelegateAdapter(String kind) { return gson.getDelegateAdapter(typeAdapterFactory, TypeToken.get((Class) ImmutableConstructModel.class)); } }
InnerResourceOperationTypeAdapter(TypeAdapterFactory factory, Gson gson) { createFileAdapter = gson.getDelegateAdapter(factory, TypeToken.get(CreateFile.class)); deleteFileAdapter = gson.getDelegateAdapter(factory, TypeToken.get(DeleteFile.class)); renameFileAdapter = gson.getDelegateAdapter(factory, TypeToken.get(RenameFile.class)); }
private <S> void writeObject(S value, JsonWriter out) throws IOException { if (value != null) { JsonObject jsonObject = new JsonObject(); jsonObject.add(OBJECT_TYPE, new JsonPrimitive(value.getClass().getName())); TypeAdapter<S> delegate = (TypeAdapter<S>) this.gson.getDelegateAdapter(this.factory, TypeToken.get(value.getClass())); jsonObject.add(OBJECT_DATA, delegate.toJsonTree(value)); Streams.write(jsonObject, out); } else { out.nullValue(); } }
private <S> void writeObject(S value, JsonWriter out) throws IOException { if (value != null) { JsonObject jsonObject = new JsonObject(); jsonObject.add(OBJECT_TYPE, new JsonPrimitive(value.getClass().getName())); TypeAdapter<S> delegate = (TypeAdapter<S>) this.gson.getDelegateAdapter(this.factory, TypeToken.get(value.getClass())); jsonObject.add(OBJECT_DATA, delegate.toJsonTree(value)); Streams.write(jsonObject, out); } else { out.nullValue(); } }