Как исключить класс из файла YAML?

Я использую SnakeYAML для сохранения данных в файле YAML.

DumperOptions options = new DumperOptions();
options.setPrettyFlow(true);
options.setAllowReadOnlyProperties(true);
Yaml yml = new Yaml(options);

FileWriter writer = new FileWriter(path);
yml.dump(object, writer);
writer.flush();
writer.close();

При попытке сохранить результат получаю такой контент

!!com.test.yml.User
users:
- {
  name: Bob,
  age: 14
}
- {
  name: John,
  age: 15
}

Как я могу избежать класса !!com.test.yml.User из файла?

Также я не хочу сохранять нулевые объекты. Например

- {
    name: null,
    age: 14
  }

должно быть

- {
    age: 14
  }

person Alex    schedule 02.02.2015    source источник


Ответы (1)


Representer representer = new Representer();
representer.addClassTag(com.test.yml.User.class, Tag.MAP);
Yaml yaml = new Yaml(representer);

Этот код говорит - пожалуйста, используйте Tag.MAP для пользователя пользовательского класса. Поскольку тег MAP является неявным, этот тег исчезнет целиком. Но чтобы проанализировать его, вы должны указать SnakeYAML, как анализировать данные в экземпляре пользователя.

person Andrey    schedule 13.02.2015
comment
Примеры кода часто даже более полезны, если сопровождаются пояснениями. - person Trilarion; 13.02.2015
comment
Код говорит - пожалуйста, используйте Tag.MAP для пользовательского класса User. Поскольку тег MAP является неявным, этот тег исчезнет целиком. Но чтобы проанализировать его, вы должны указать SnakeYAML, как анализировать данные в экземпляре пользователя. - person Andrey; 07.04.2015
comment
как установить DumperOptions (настроить формат) и Representer (удалить тег класса) в конструктор Yaml? - person kunal khedkar; 11.03.2021