首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用yamlbeans和fxml属性的yaml序列化

使用yamlbeans和fxml属性的yaml序列化
EN

Stack Overflow用户
提问于 2018-01-19 03:38:24
回答 1查看 359关注 0票数 2

我正在尝试使用YamlBeans来序列化fxml属性。具体地说就是一处房产。该类有一个私有属性字段和fxml标准的getter和setter方法,但是当序列化发生时,信息不会保存到文件中。

入口点:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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:

代码语言:javascript
复制
!Person {}

EN

回答 1

Stack Overflow用户

发布于 2018-01-19 05:36:17

你的代码看起来没问题。Beans getProperties会为你的类返回什么?这就是YamlWriter uses

事实证明,Beans正在查找所有属性,然后查找get/set方法。看起来它应该先找到您的number字段,然后找到您的setNumbergetNumber方法,但是您没有提供完整的类代码。

我建议提供一个SSCCE。试图帮助没有这种能力的人是白费力气,浪费时间。

编辑: Beans查找字段的方式,然后是匹配的setter/getter,Property<Number> age就不起作用了。Bean查找Property<Number>类型的setter/getter,但没有找到它们。IIRC它曾经使用Introspector,但它不得不被删除,因为它在Android中缺失了。

要解决这个问题,您需要修补Beans,以便更智能地查找没有相应字段的setter/getter。这样做的公关将被合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48329075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档