使用 libgdx 反序列化 json 时调用对象构造函数
Invoke object constructor when deserializing json using 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 ..
}
Character
实施..
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 使用反射在反序列化时生成实例。因此它将创建一个空对象,然后将字段值添加到其中。您设置玩家最大速度的构造函数将不会被调用。
如果您需要在此处执行一些奇特的逻辑,您可以使用 Json.Serializable
编写自己的反序列化逻辑,如 Customizing Serialization.
中所述
为什么我的 player
的对象构造函数在反序列化过程中没有被调用?有没有办法使用这种方法调用构造函数?
使用 com.badlogic.gdx.utils.Json
..
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 ..
}
Character
实施..
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 使用反射在反序列化时生成实例。因此它将创建一个空对象,然后将字段值添加到其中。您设置玩家最大速度的构造函数将不会被调用。
如果您需要在此处执行一些奇特的逻辑,您可以使用 Json.Serializable
编写自己的反序列化逻辑,如 Customizing Serialization.