C# 写入 XML 文件不会保存对象

本文关键字:保存 对象 文件 写入 XML | 更新日期: 2023-09-27 18:37:07

我在Java方面有一些经验。今天我开始用C#编程,因为我喜欢Visual Studio。

作为练习,我正在构建一个管理系统来管理公司中的所有员工。我正在研究一个名为Function的类:

public class Function
{
    private String functionname;
    private String department;
    private double hourpay;

    public String getFunc()
    {
        return functionname;
    }
    public String getDepartement()
    {
        return department;
    }
    public double getPay()
    {
        return hourpay;
    }
    public String toString()
    {
        return ("Function: " + functionname + "'n" + "Department: " + department + "'n" + "Hourly Pay: " + hourpay);
    }
    public void setFunctionName(string functionname)
    {
        this.functionname = functionname;
    }
    public void setDepartment(String department)
    {
        this.department = department;
    }
    public void setPay(double pay)
    {
        this.hourpay = pay;
    }

一个非常简单的基本类来建模函数,现在我想将函数保存在XML文件中。

我想到的是:创建函数后,我将其放入名为"函数"(列表函数)的列表中我将列表写入 XML 文件。

如果我想更新 XML 文件,我只需加载 List,添加一个新函数,然后将其覆盖到 XML 文件中。

我让我的类函数像这样;

public class Functions{
    public List<Function> functions = new List<Function>();
    public void addFunction(Function func){
        functions.Add(func);
    }
    public void writeFunctions()
    {
            System.Xml.Serialization.XmlSerializer writer =
                new System.Xml.Serialization.XmlSerializer(typeof(Functions));
            System.IO.StreamWriter file = new System.IO.StreamWriter(
             @"C:'CDatabase'Functions.xml");
            writer.Serialize(file, this);
            file.Close();
    }
}

为了测试它,我在按钮的单击事件中实现了它:

Function programmer = new Function();
schoonmaker.setFunctionName("Programmer");
schoonmaker.setDepartment("IT");
schoonmaker.setPay(16.50);
FunctionDatabase.addFunction(schoonmaker);
FunctionDatabase.writeFunctions();

它创建XML文件(如果不存在),这是在XML文件中:

<Functions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <functions>
    <Function />
  </functions>
</Functions>

它是空的,我不明白为什么以及如何修复它。

我想我想得太容易了,但我找不到解决方法。

提前感谢,

克里斯

C# 写入 XML 文件不会保存对象

C# 不使用像 Java 那样的 getter 和 setter 方法。像这样创建属性:

private string functionname;
public string functionname
{
  get { return functionname; }
  set { functionname = value; }
}

建议使用属性而不是getter/setter函数 - 它们是C#的一个功能,经常使用。

例如,代替:

public double getPay()
{
    return hourpay;
}

尝试:

public double HourPay { get; set; }

或者,如果您希望能够在吸气剂/二传手中执行操作:

private double hourPay;
public double HourPay
{
    get
    {
        return hourPay;
    }
    set
    {
        hourPay = value;
    }
}

通过以这种方式使用公共属性,XML 序列化程序应生成所需的文件。