gpt4 book ai didi

java - 如何使用 SnakeYaml 加载自定义对象列表

转载 作者:行者123 更新时间:2023-12-01 05:49:42 27 4
gpt4 key购买 nike

我一直在尝试将以下 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 Deserialise Class containing a List of Objects .
看完之后,我才知道 ConstructorTypeDescriptor类,但我仍然无法让它工作(我得到的是 HashMaps 列表,而不是 Stages)。

与上面链接中的问题不同的是,我的顶级结构是一个列表,而不是一个自定义对象。

最佳答案

一种方法是像这样创建自己的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));

关于java - 如何使用 SnakeYaml 加载自定义对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56187845/

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