我正在尝试使用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 {}
答案 0 :(得分:0)
您的代码看起来不错。 Beans getProperties
为您的课程返回什么?这就是YamlWriter uses。
结果Beans找到所有属性,然后查找get / set方法。看起来它应该找到您的number
字段,然后是setNumber
和getNumber
方法,但您没有提供完整的类代码。
我建议提供SSCCE。试图帮助没有这个的人是黑暗中的一击,浪费时间。
编辑:Beans查找字段的方式,然后是匹配的setter / getter,Property<Number> age
不起作用。 Beans寻找Property<Number>
类型的setter / getter并且找不到它们。 IIRC曾经使用过Introspector,但由于Android中没有它,所以必须将其删掉。
要解决这个问题,你需要修补Beans,以便更聪明地找到没有相应字段的setter / getter。执行此操作的PR将合并。