gpt4 book ai didi

java和simplexml框架,如何序列化方法输出

转载 作者:行者123 更新时间:2023-12-01 14:09:34 25 4
gpt4 key购买 nike

我想序列化一个方法输出,就像下面的类一样。

@Root
public class Camera {
public enum Mode {
CONTINIOUS, TRIGGERED, DEACTIVATED;
}

@Element
private Mode currMode;
@Element
private int interval;
@Element
private int beforeEvent;
@Element
private int afterEvent;
@Element
private String savePath;

public Camera(Mode currMode, int interval, int beforeEvent, int afterEvent,
String savePath) {
super();
this.currMode = currMode;
this.interval = interval;
this.beforeEvent = beforeEvent;
this.afterEvent = afterEvent;
this.savePath = savePath;
}


@ElementList(entry = "mode", name = "availableModes")
public ArrayList<Mode> getAvailableModes() {
return new ArrayList<Mode>(Arrays.asList(Mode.values()));
}

}

该方法以 List 的形式返回所有可能的枚举。如果没有设置默认构造函数,则序列化成功完成。

<camera>
<savePath>/images</savePath>
<currMode>CONTINIOUS</currMode>
<beforeEvent>5000</beforeEvent>
<interval>3000</interval>
<afterEvent>10000</afterEvent>
<availableModes>
<mode>CONTINIOUS</mode>
<mode>TRIGGERED</mode>
<mode>DEACTIVATED</mode>
</availableModes>
</camera>

但是,反序列化需要默认构造函数。如果我设置默认构造函数,则会在序列化和反序列化过程中收到以下错误。

Default constructor can not accept read only @org.simpleframework.xml.ElementList(data=false, empty=true, entry=mode, inline=false, name=availableModes, required=false, type=void) on method 'availableModes' in class Camera

在反序列化期间,应忽略带注释的方法。是否可以定义一个元素,在序列化过程中会考虑该元素,在反序列化过程中会忽略该元素?

最佳答案

您需要确保有某种方法来设置列表,您可以为列表添加 setter ,或者可以像这样使用构造函数注入(inject)。

 public Camera(
@Element(name="currMode") Mode currMode,
@Element(name="interval") int interval,
@Element(name="beforeEvent") int beforeEvent,
@Element(name="afterEvent") int afterEvent,
@Element(name="savePath") String savePath,
@ElementList(name="availableModes") List<Mode> availableModes)
{
this.currMode = currMode;
this.interval = interval;
this.beforeEvent = beforeEvent;
this.afterEvent = afterEvent;
this.savePath = savePath;
}

无论如何,XML 序列化过程需要知道应该将在元素“availableMode”中找到的值放在哪里

关于java和simplexml框架,如何序列化方法输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18630531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com