SnakeYAML предназначен в первую очередь для сериализации JavaBeans.
Приведенный выше пример не соответствует спецификации JavaBean. Чтобы быть JavaBean, объект должен иметь конструктор без аргументов, а каждое поле должно иметь геттер и сеттер.
Если вы переписываете свой класс как бин, SnakeYAML должен сериализовать его без проблем. Кроме того, SnakeYAML может сериализовать открытые поля, так что если вы измените видимость value
на public
, тогда SnakeYAML найдет и сериализует его.
Если вы действительно хотите избежать изменения MyClass
, вы можете явно указать SnakeYAML для сериализации свойств, доступных только для чтения, что-то вроде этого:
PropertyUtils propUtils = new PropertyUtils();
propUtils.setAllowReadOnlyProperties(true);
Representer repr = new Representer();
repr.setPropertyUtils(propUtils);
Yaml yaml = new Yaml(new Constructor(), repr);
Однако выгрузка не-JavaBean-объектов в YAML может вызвать проблемы, когда вы возвращаете их обратно в серию Object
, поэтому я рекомендую использовать JavaBeans как самое простое и безопасное решение.
Редактировать: Вот пример MyClass, преобразованный в JavaBean:
public class MyClass {
String value;
/* public, no-argument constructor */
public MyClass() {
}
/* Every field has a public getter... */
public String getValue(){
return value;
}
/* ... and a public setter */
public void setValue(String value) {
this.value = value;
}
}