使用yamlbeans反序列化嵌套类

使用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文件。

+0

谢谢,蝙蝠侠。这工作完美。 – 2012-03-23 17:10:38

+0

蝙蝠侠,你是英雄:D – pokeRex110 2013-06-07 09:33:57