【问题标题】:Deserialize nested class using yamlbeans使用 yamlbeans 反序列化嵌套类
【发布时间】:2012-02-27 20:29:32
【问题描述】:

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

单类示例:

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

多个类(在 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;
}

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 文件知道类名。

【问题讨论】:

    标签: java serialization configuration yaml


    【解决方案1】:

    我相信你正在寻找的是

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-01
      • 2013-10-12
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多