当前位置: 首页 > 知识库问答 >
问题:

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

邢良才
2023-03-14

我正在尝试使用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");
    }
}

人物.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 {}

共有1个答案

燕宏胜
2023-03-14

您的代码看起来正常。Beans 获得属性为您的类返回什么?这就是 YamlWriter 使用的。

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

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

编辑:Beans 查找字段的方式,然后是匹配的二传手/获取者,属性

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

 类似资料:
  • 但是房产没有被选中。例如,下面的代码创建一个${log-path}文件夹来存储日志文件,而不是所需的logs文件夹。 我做错了什么?

  • 我有一个基类,它使用php魔术方法__get和__set,可以修改扩展类中的私有属性。然后,我为相关的私有属性构建setter getter函数(类似于http://www.beaconfire-red.com/epic-stufle/better-getters-and-setters-php)

  • 我要求Spring Boot应用程序加载一些理想地适合某种迷你电子表格的配置。几乎所有配置都由绑定到POJO的YAML属性文件组成,因此: 如果YAML被构造为这样的对象序列,则这可以很好地工作: 然而,从这个配置的用户/作者的角度来看,如果数据被组织成一个“电子表格”,那就太好了,因为他们将能够在彼此的上下文中看到各种值,而不是上面的大列表(大约有十几个条目)。类似这样的东西: 这是有效的YAM

  • 我想从YAML向Spring上下文注入一些值。YAML的结构类似,因此我不想重复代码,但Spring启动失败,因为它无法将值注入占位符。 请注意我的: 然后我将这些值注入YAML, 然后我将其导入到配置属性上下文: 但是< code > @ Value(" $ { auto agents . supplier } ")不起作用。 请建议。

  • 主要内容:节点锚点,节点标签,节点内容每个表示节点包括两个主要特征,称为锚和标记。可以使用节点内容指定节点属性,从字符流中省略。 节点表示的基本示例如下 - 节点锚点 属性表示将来参考的节点。 节点中YAML表示的字符流用符号表示。 YAML处理器不需要保留锚名称以及其中包含的表示细节。以下代码解释了这一点 - 锚节点生成的YAML输出如下所示 - 节点标签 属性表示完全定义节点的本机数据结构的类型。 标签用()指示符表示。 标签被视

  • 我在Java spring-boot应用程序的src/main/resources中定义了以下application-errors.yml文件: 请注意,我尝试了两种不同的格式来指定属性。 我通过@Configuration注释类中的以下Bean加载该属性文件: 我看到属性是通过Spring环境变量加载的,但不是我所期望的模式。调试时,我可以看到加载的属性文件的源包含以下值: 看起来 yaml 文