看起来您发现了JsonSerializer文档警告的无限循环:
但是,永远不要在src对象本身上调用它,因为这将导致无限循环(Gson将再次调用您的回调方法)。
我想到的最简单的方法是创建一个 未 安装处理程序的新Gson实例,然后通过该实例运行您的实例。
最后,您可以序列化List<Behavior>
代替代码:
public class Behaviorlistadapter implements JsonSerializer<List<Behavior>> {
private static final String CLASSNAME = "CLASSNAME";
private static final String INSTANCE = "INSTANCE";
@Override
public JsonElement serialize(List<Behavior> src, Type typeOfSrc,
JsonSerializationContext context) {
JsonArray array = new JsonArray();
for (Behavior behavior : src) {
JsonObject behaviorJson = new JsonObject();
String className = behavior.getClass().getCanonicalName();
behaviorJson.addProperty(CLASSNAME, className);
JsonElement elem = context.serialize(behavior);
behaviorJson.add(INSTANCE, elem);
array.add(behaviorJson);
}
return array;
}
}
GsonBuilder builder = new GsonBuilder();
// use a TypeToken to make a Type instance for a parameterized type
builder.registerTypeAdapter(
(new TypeToken<List<Behavior>>() {}).getType(),
new Behaviorlistadapter());
gson = builder.create();