java - 使用libgdx反序列化json时调用对象构造函数

标签 java json libgdx

为什么我的 player 对象构造函数在反序列化期间没有被调用?有没有办法使用这种方法调用构造函数?

使用com.badlogic.gdx.utils.Json将json加载到java对象中..

LevelModel ld = new Json().
    fromJson(LevelModel.class, Gdx.files.internal("levels/level1.json"));
setLevel(new Level(ld));

这是我的 JSON ..

{
    "gravity": {
        "x": 0.0,
        "y": 0.0
    },

    "sounds": [
        BGMUSIC
    ],

    "player": {
        "maxSpeed": 10.0
    }
}

LevelModel.java 看起来像这样..

public class LevelModel {

    private Vector2 gravity;
    private Vector<AudioCollection> sounds = new Vector<AudioCollection>();
    private Character player;

    // with getters/setters for each ..
}

字符实现..

public class Character {

    private float maxSpeed;

    public Character (){
        System.out.println("empty - charercter constr");
    }

    /**
     * @param speed
     */
    public Character(float maxSpeed) {

        System.out.println("charercter constr");
        setMaxSpeed(maxSpeed);
    }

    // with getters/setters for each ..
}

最佳答案

默认情况下,libgdx json 使用反射来生成反序列化实例。因此它将创建一个空对象,然后向其中添加字段值。设置玩家 maxSpeed 的构造函数不会被调用。

如果您需要在此处执行一些奇特的逻辑,您可以使用 Json.Serialized 编写自己的反序列化逻辑,如 Customizing Serialization 中所述。 .

关于java - 使用libgdx反序列化json时调用对象构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507466/

相关文章:

java - 需要解决在特定情况下 applet 崩溃 JVM 的问题

java - 从 Selenium Webdriver 中的字符串中获取子字符串

javascript - 如何访问嵌套的 JSON 对象

java - SpriteBatch 设置在 libgdx 中 Actor 级别以下

java - Android 游戏上的自动保存和自动加载游戏概念以及内部保存与保存。外部(又称 SD 卡)

java - libgdx/安卓 : graphics disappearing after the app is destroyed/paused

java - 所有 Maven 项目模块具有相同的时间戳值

java - hibernate SQLQueryImpl setParameter 与 setString

javascript - JSON 编码 MySQL 数组并在 Google map 上显示

javascript - 如何在不重建 angular cli 的情况下更新 .json 文件?