以下のクラスのようにメソッド出力をシリアライズしたいと思います。
@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
逆シリアル化中は、注釈付きのメソッドを無視する必要があります。シリアル化プロセス中に考慮され、逆シリアル化プロセス中に無視される要素を定義する可能性はありますか?