gpt4 book ai didi

java - 使用 yamlbeans 反序列化嵌套类

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:59 26 4
gpt4 key购买 nike

我正在使用 yamlbeans 将 yaml 文件反序列化为 Java 对象。只要我只有一节课,这就可以正常工作。问题是当我想嵌套一个字段时,我不得不在 yaml 描述中指定嵌套类。

单类示例:

Java:

public class MessageField {
public String name;
public String type;
public int length;
public String comment;
}

亚姆:

name: field1
type: int
length: 4
comment: first field
---
name: field2
type: string
length: 16
comment: second field
---

多个类(yaml 文件中需要 !com.mylib.VariableField)

Java:

public class MessageField {
public String name;
public String type;
public int length;
public String comment;
public List<VariableField> variableFields;
}
public class VariableField extends MessageField{
public int id;
}

亚姆:

name: field3
type: short
length: 2
comment:
variableFields:
- !com.mylib.VariableField
id: 1
name: nestedField 1
type: string
length: -1
comment:
---

yaml 文档页面描述了如何在读取类时通过指定类型来反序列化类,这就是我为我的顶级类所做的:

YamlReader reader = new YamlReader(new FileReader("sample.yml"));
MessageField mf = reader.read(MessageField.class);

这正确地解析了我的顶级类的字段,但不允许我避免嵌套类的 !com.mylib.VariableField 标识符。我想弄清楚是否有任何方法可以更改 Java 代码,以便 yaml 文件不需要知道类名。

最佳答案

我相信你要找的是

reader.getConfig().setPropertyElementType(MessageField.class, "variableFields", VariableField.class);

为基于集合的字段设置默认元素类型。同样,setPropertyDefaultType 方法可用于指定字段本身的默认类型。

使用为 YamlReader 指定的默认字段/元素类型,您应该不再需要在 yaml 文件中包含类名(尽管您包含的任何类型名称都会覆盖这些默认值)。此外,如果为 YamlWriter 定义了默认类型,则不会将多余的类名写入 yaml 文件。

关于java - 使用 yamlbeans 反序列化嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471814/

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