public class JsonSerializableTest {
protected static transient RuntimeTypeAdapterFactory<JsonSerializable> adapterFactory =
RuntimeTypeAdapterFactory.of(JsonSerializable.class,"clazz")
.registerSubtype(A.class,A.class.getName())
.registerSubtype(B.class,B.class.getName())
.registerSubtype(C.class,C.class.getName());
protected static transient Gson gson = new GsonBuilder().registerTypeAdapterFactory(adapterFactory).create();
protected static transient Type typeToken = new TypeToken<JsonSerializable>() {}.getType();
@Test
public void fromJson(){
C c = new C();
c = gson.fromJson(gson.toJson(c),typeToken);
LogbackReporter.log(gson.toJson(c));
}
private abstract class A extends JsonSerializable{
public A(){}
}
private class B extends A{
}
private class C extends JsonSerializable{
public A a1 = new B();
public A a2 = new B();
}
}
java.lang.RuntimeException: Unable to invoke no-args constructor for class com.tingyun.tads.api.JsonSerializableTest$A. Registering an InstanceCreator with Gson for this type may fix this problem.
Вы можете скачать RuntimeTypeAdapterFactory с git-адреса gson.Оно не будет включено в гуаву.
Если я удалю абстрактное ключевое слово, оно будет работать, но я хочу сохранить его.
Может ли кто-нибудь мне помочь?