我一直在尝试将以下 yaml 反序列化为List<Stage>
使用 SnakeYaml:
- name: Stage1
items:
- item1
- item2
- name: Stage2
items:
- item3
public class Stage {
private String name;
private List<String> items;
public Stage() {
}
public Stage(String name, List<String> items) {
this.name = name;
this.items = items;
}
// getters and setters
}
我发现的最接近的问题是SnakeYaml 反序列化包含对象列表的类 https://stackoverflow.com/questions/42545091/snakeyaml-deserialise-class-containing-a-list-of-objects。
读完后我知道Constructor
and TypeDescriptor
类,但我仍然无法让它工作(我得到 HashMap 列表,而不是阶段)。
与上面链接中的问题的区别在于我的顶级结构是一个列表,而不是自定义对象。
一种方法是创建自己的 Snakeyaml 构造函数,如下所示:
public class ListConstructor<T> extends Constructor {
private final Class<T> clazz;
public ListConstructor(final Class<T> clazz) {
this.clazz = clazz;
}
@Override
protected Object constructObject(final Node node) {
if (node instanceof SequenceNode && isRootNode(node)) {
((SequenceNode) node).setListType(clazz);
}
return super.constructObject(node);
}
private boolean isRootNode(final Node node) {
return node.getStartMark().getIndex() == 0;
}
}
然后在构建 Yaml 时使用它:
final Yaml yaml = new Yaml(new ListConstructor<>(Stage.class));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)