我正在尝试使用YamlBeans来序列化fxml属性。具体地说就是一处房产。该类有一个私有属性字段和fxml标准的getter和setter方法,但是当序列化发生时,信息不会保存到文件中。
入口点:
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
Person person = new Person(5);
YamlSerializer.serialize(person, System.getProperty("user.dir") + "/person.yml");
}
}Person.java
import javafx.beans.property.Property;
import javafx.beans.property.SimpleDoubleProperty;
public class Person{
private Property<Number> age;
public Person(){
age = new SimpleDoubleProperty();
age.setValue(3);
}
public Person(Number age){
this.age = new SimpleDoubleProperty(age.doubleValue());
}
public Property<Number> ageProperty() {
return this.age;
}
public Number getAge() {
return this.ageProperty().getValue();
}
public void setAge(final Number age) {
this.ageProperty().setValue(age);
}
}YamlSerializer.java
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import com.esotericsoftware.yamlbeans.YamlReader;
import com.esotericsoftware.yamlbeans.YamlWriter;
public class YamlSerializer {
public static void serialize(Object object, String path) throws IOException{
File file = new File(path);
if(!file.exists())
file.getParentFile().mkdirs();
YamlWriter writer = new YamlWriter(new FileWriter(path));
writer.write(object);
writer.close();
}
public static Object deserialize(String path) throws IOException{
File file = new File(path);
if(!file.exists()){
if(!file.getParentFile().exists())
if (!file.getParentFile().mkdirs()){
System.out.println("Error creating files");
}
}
YamlReader reader = new YamlReader(new FileReader(path));
return reader.read();
}
}输出文件person.yml:
!Person {}

发布于 2018-01-19 05:36:17
你的代码看起来没问题。Beans getProperties会为你的类返回什么?这就是YamlWriter uses。
事实证明,Beans正在查找所有属性,然后查找get/set方法。看起来它应该先找到您的number字段,然后找到您的setNumber和getNumber方法,但是您没有提供完整的类代码。
我建议提供一个SSCCE。试图帮助没有这种能力的人是白费力气,浪费时间。
编辑: Beans查找字段的方式,然后是匹配的setter/getter,Property<Number> age就不起作用了。Bean查找Property<Number>类型的setter/getter,但没有找到它们。IIRC它曾经使用Introspector,但它不得不被删除,因为它在Android中缺失了。
要解决这个问题,您需要修补Beans,以便更智能地查找没有相应字段的setter/getter。这样做的公关将被合并。
https://stackoverflow.com/questions/48329075
复制相似问题