您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Gson多态序列化

Gson多态序列化

看起来您发现了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();
其他 2022/1/1 18:27:22 有762人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶