簡単な方法はTypeAdapterFactory
とインタフェースを組み合わせることです。あなたのメソッドのためのインタフェース
まず:
public interface MyInterface {
public String buildDomClass();
}
その後、工場:、
final class MyAdapter implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) {
final TypeAdapter<T> adapter = gson.getDelegateAdapter(this, tokenType);
return new TypeAdapter<T>() {
@Override
public T read(JsonReader reader) throws IOException {
return adapter.read(reader);
}
@Override
public void write(JsonWriter writer, T value) throws IOException {
JsonElement tree = adapter.toJsonTree(value);
if (value instanceof MyInterface) {
String dom = ((MyInterface) value).buildDomClass();
JsonObject jo = (JsonObject) tree;
jo.addProperty("dom", dom);
}
gson.getAdapter(JsonElement.class).write(writer, tree);
}
};
}
}
簡単に理解するためにあなたがシリアライズしたいオブジェクトがインタフェースを実装している場合、あなたはシリアライズを委任し、 DOMを保持する追加のプロパティを追加します。
あなたが知らない、あなたはこの
Gson gson = new GsonBuilder().registerTypeAdapterFactory(new MyAdapter()).create();
偉大な答えのような工場を登録する場合には、どうもありがとう! –