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# 不使用像 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 序列化程序应生成所需的文件。