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

时间:2015-01-10 22:13:55

标签: c# xml file object save

我有一些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文件中。

我的想法是: 创建函数后,我把它放在一个名为Functions(List函数)的列表中 我将列表写入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>

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

我觉得我觉得太容易了,但我找不到解决办法。

提前致谢,

克里斯

2 个答案:

答案 0 :(得分:4)

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

private string functionname;

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

答案 1 :(得分:2)

建议使用属性而不是getter / setter函数 - 它们是C#的一个特性,它被大量使用。

例如,而不是:

public double getPay()
{
    return hourpay;
}

尝试:

public double HourPay { get; set; }

或者,如果您希望能够在getter / setter中执行操作:

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

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