我正在尝试编写一个GSON TypeAdapterFactory,以将String型键/值对中的所有键转换为小写;即它将转换:
[{"Foo","Bar"}]
到
[{"foo","Bar"}]
到目前为止,这是我所拥有的,但是在确定键何时为字符串值时遇到了麻烦。 JsonTreeWriter
类具有name()
的Setter方法,但是没有用于获取名称的方法吗?
TypeAdapterFactory lowercaseKeyTypeAdapterFactory = new TypeAdapterFactory() {
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type); //
return new TypeAdapter<T>() {
public void write(JsonWriter out, T value) throws IOException {
if( out instanceof JsonTreeWriter )
out.name( out.getName().toLowerCase();
JsonElement tree = delegate.toJsonTree(value);
elementAdapter.write(out, tree);
}
public T read(JsonReader in) throws IOException {
JsonElement tree = elementAdapter.read(in);
return delegate.fromJsonTree(tree);
}
};
}
};