我一直在尝试使用SnakeYaml将以下Yaml反序列化为List<Stage>
:
- 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 Deserialise Class containing a List of Objects。
阅读它之后,我知道了Constructor
和TypeDescriptor
类,但是仍然无法使它正常工作(我得到的是HashMaps列表,而不是Stages)。
与上面链接中的问题的不同之处在于,我的顶层结构是列表,而不是自定义对象。
答案 0 :(得分:0)
一种方法是像这样创建自己的snakeyaml构造函数:
function handleInputChange() {
var inputValue = document.getElementById("input-id").value;
var options = document.getElementById("list-id").childNodes;
for (var i = 0; i < opts.length; i++) {
if (options[i].value === inputValue) {
// Send to DB - options[i].attributes.value
console.log(options[i].attributes.value)
break;
}
}
}
,然后在构造Yaml时使用它:
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;
}
}