资料来源:
http://x-stream.github.io/converter-tutorial.html#ComplexConverter
我可以通过做
moveDown()
和
moveUp()
. 我明白了当你使用
向下移动()
,对象将光标移动到下一个
非读取
孩子,所以我要做的是做一个循环,尽可能多地上下移动标记代理。我的代码现在是:
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
DevicePai devicePai = new DevicePai();
devicePai.setDev_id(reader.getAttribute("dev_id"));
reader.moveDown();
Agent agent = new Agent();
while (reader.hasMoreChildren()) {
reader.moveDown();
agentFieldContructor(agent, reader.getNodeName(), reader.getValue());
reader.moveUp();
}
devicePai.setAgent(agent);
reader.moveUp();
agentFieldConstructor()
是一种向代理添加指定字段传递参数的方法,它只是一个开关盒块。
2017年12月14日更新:
第二个更好的答案。我可以告诉XStream自动转换代理标记,所以我取“dev\u id”,然后,我需要做的就是调用“context”:
Agent newAgent = (Agent) context.convertAnother(devicePai, Agent.class);
现在我需要设置设备属性:
devicePai.setAgent(newAgent);
没有任何手动操作,我的解组方法最终是这样的:
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
DevicePai devicePai = new DevicePai();
devicePai.setDev_id(reader.getAttribute("dev_id");
reader.moveDown();
Agent newAgent = (Agent) context.convertAnother(devicePai, Agent.class));
devicePai.setAgent(newAgent);
reader.moveUp();
return devicePai;
}