首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用yamlbeans反序列化嵌套类

使用yamlbeans反序列化嵌套类
EN

Stack Overflow用户
提问于 2012-02-28 04:29:32
回答 1查看 3.5K关注 0票数 6

我使用yamlbeans将yaml文件反序列化为Java对象。只要我只有一个类,就可以很好地工作。问题是,当我想嵌套一个字段时,我被迫在yaml描述中指定嵌套的类。

单类示例:

Java:

代码语言:javascript
复制
public class MessageField {
    public String name;
    public String type;
    public int length;
    public String comment;
}

yaml:

代码语言:javascript
复制
name: field1
type: int
length: 4
comment: first field
---
name: field2
type: string
length: 16
comment: second field
---

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

Java:

代码语言:javascript
复制
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:

代码语言:javascript
复制
name: field3
type: short
length: 2
comment:
variableFields:
  - !com.mylib.VariableField
    id: 1
    name: nestedField 1
    type: string
    length: -1
    comment:
---

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

代码语言:javascript
复制
YamlReader reader = new YamlReader(new FileReader("sample.yml"));
MessageField mf = reader.read(MessageField.class);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-12 14:49:35

我相信你要找的是

代码语言:javascript
复制
reader.getConfig().setPropertyElementType(MessageField.class, "variableFields", VariableField.class);

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

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9471814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档