使用yamlbeans反序列化嵌套类
问题描述:
我正在使用yamlbeans将yaml文件反序列化为Java对象。只要我只有一个班级,这工作正常。问题是当我想嵌套一个字段时,我不得不在yaml描述中指定嵌套类。使用yamlbeans反序列化嵌套类
单类的例子:
的Java:
public class MessageField {
public String name;
public String type;
public int length;
public String comment;
}
YAML:
name: field1
type: int
length: 4
comment: first field
---
name: field2
type: string
length: 16
comment: second field
---
多个类(!需要com.mylib.VariableField在YAML文件)
的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;
}
YAML:
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文件。
谢谢,蝙蝠侠。这工作完美。 – 2012-03-23 17:10:38
蝙蝠侠,你是英雄:D – pokeRex110 2013-06-07 09:33:57