Java 使用yamlbeans反序列化嵌套类

Java 使用yamlbeans反序列化嵌套类,java,serialization,configuration,yaml,Java,Serialization,Configuration,Yaml,我正在使用yamlbeans将yaml文件反序列化为Java对象。只要我只有一节课,这就行了。问题是,当我想嵌套一个字段时,我必须在yaml描述中指定嵌套类 单类示例: 爪哇: 亚马尔: 多个类(yaml文件中需要!com.mylib.VariableField) 爪哇: yaml文档页面描述了如何通过在读取类时指定类型来反序列化类,这是我为顶级类所做的: YamlReader reader = new YamlReader(new FileReader("sample.yml")); Mess

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

单类示例:

爪哇:

亚马尔:

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

爪哇:

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文件

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:
---
YamlReader reader = new YamlReader(new FileReader("sample.yml"));
MessageField mf = reader.read(MessageField.class);
reader.getConfig().setPropertyElementType(MessageField.class, "variableFields", VariableField.class);