Skip to content

Instantly share code, notes, and snippets.

@afiqiqmal
Created August 9, 2020 12:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save afiqiqmal/feb72371e5f714b0669e97450dfbbf18 to your computer and use it in GitHub Desktop.
Save afiqiqmal/feb72371e5f714b0669e97450dfbbf18 to your computer and use it in GitHub Desktop.
GSON Class Type Converter

Usage

gsonBuilder.registerTypeAdapterFactory(new ClassTypeAdapterFactory());
public class ClassTypeAdapter extends TypeAdapter<Class<?>> {
@Override
public void write(JsonWriter jsonWriter, Class<?> clazz) throws IOException {
if(clazz == null){
jsonWriter.nullValue();
return;
}
jsonWriter.value(clazz.getName());
}
@Override
public Class<?> read(JsonReader jsonReader) throws IOException {
if (jsonReader.peek() == JsonToken.NULL) {
jsonReader.nextNull();
return null;
}
Class<?> clazz = null;
try {
clazz = Class.forName(jsonReader.nextString());
} catch (ClassNotFoundException exception) {
throw new IOException(exception);
}
return clazz;
}
}
public class ClassTypeAdapterFactory implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
if(!Class.class.isAssignableFrom(typeToken.getRawType())) {
return null;
}
return (TypeAdapter<T>) new ClassTypeAdapter();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment