我正在尝试从此JSON代码中反序列化JSON对象:
{
"bg" : {
"fileName" : "data/gui/mainMenuBg.jpg"
},
"startGameBtn" : {
"text" : "Start Game",
"innerWidth" : 100,
"innerHeight" : 50
}
}
我反序列化的对象看起来像这样:
public class MainMenu extends BasicTWLGameState {
private StateBasedGame app;
@JsonProperty private Image bg;
@JsonProperty private Button startGameBtn;
// [...]
}
我为Button
类的基类创建了一个混合:
public abstract class WidgetMixIn {
// Not sure why I have to ignore only this when there are other setters that it should complain about...
@JsonIgnore public abstract boolean setBorderSize(Border border);
@JsonProperty("innerWidth") public abstract int getInnerWidth();
@JsonProperty("innerHeight") public abstract int getInnerHeight();
public abstract void setInnerSize(
@JsonProperty("innerWidth") int width,
@JsonProperty("innerHeight") int height);
}
Button
类本身的混合:
public class ButtonMixIn {
@JsonProperty public String text;
}
我得到的错误是:
ERROR:Unrecognized field "innerWidth" (Class de.matthiasmann.twl.Button), not marked as ignorable
at [Source: data\gui\mainMenu.json; line: 7, column: 27] (through reference chain: state.MainMenu["startGameBtn"]->de.matthiasmann.twl.Button["innerWidth"])
为什么找不到innerWidth
混合中定义的Widget
属性?
干杯。
答案 0 :(得分:0)
ButtonMixIn类没有innerHeight和innerWidth JsonProperty注释。
如果ButtonMixIn类是从你定义的抽象按钮类扩展的,那么你就缺少ButtonMixIn extends WidgetMixIn行。
答案 1 :(得分:0)
问题是你的“setInnerSize()” - Java bean属性setter只允许一次设置一个属性;多个属性只能与带注释的构造函数一起使用。 因此,您需要将其拆分为两个独立的设置器。
对于它的价值,有一个功能增强请求让杰克逊使用多参数设置器,但当前版本还不支持。