【问题标题】:Yaml: How to deserialize a collection?Yaml:如何反序列化集合?
【发布时间】:2015-03-16 08:27:17
【问题描述】:

我尝试使用 snakeyaml lib 解析 Yaml 文件。这是我的 yaml 文件。

---
users:   
  - name: Bobby
    status: single
    license: no    
  - name: Timmy
    status: single
    license: no
    available: yes

还有 Java 代码。

public class Users {
    private List<User> users;
    // getters/setters/def constructor have omitted
}

用户类。

public class User {
    private String name;
    private String status;
    private String license;
    private String available;
    // getters/setters/def constructor have omitted
}

我的代码来解析内容。

Constructor constructor = new Constructor(Users.class);
TypeDescription usersDescription = new TypeDescription(Users.class);
profileDescription.putListPropertyType("users", User.class);
constructor.addTypeDescription(usersDescription);        
Yaml yml = new Yaml(constructor);    
Users users = (Users) yml.load(new FileInputStream(new File("/path/file.yaml")));

但我遇到了一个例外。

Exception in thread "main" Cannot create property=users for JavaBean=Users(users=null)
 in 'reader', line 1, column 1:
    users:
    ^

我该如何解决?

PS

当我尝试与两个用户一起转储内容时,我得到了

!!com.project.model.Users
users:
- {}
- {}

【问题讨论】:

    标签: java yaml snakeyaml


    【解决方案1】:

    试试这个:

    Users users= (Users) yaml.loadAs(new FileInputStream(new File("/path/file.yaml")), Users.class);
    

    代替:

    Constructor constructor = new Constructor(Users.class);
    TypeDescription usersDescription = new TypeDescription(Users.class);
    profileDescription.putListPropertyType("users", User.class);
    constructor.addTypeDescription(usersDescription);        
    Yaml yml = new Yaml(constructor);    
    Users users = (Users) yml.load(new FileInputStream(new File("/path/file.yaml")));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多