C#写入XML文件不保存对象
Posted
技术标签:
【中文标题】C#写入XML文件不保存对象【英文标题】:C# Writing to XML file does not save object 【发布时间】:2015-01-10 22:13:54 【问题描述】:我在 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 的列表中(列表函数) 我将列表写入 XML 文件。
如果我想更新 XML 文件,我只需加载列表,添加一个新函数,然后将其覆盖到 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>
它是空的,我不明白为什么以及如何解决它。
我想我想得太简单了,但我找不到解决办法。
提前致谢,
克里斯
【问题讨论】:
什么是 schoonmaker?c# != java
,在发布此问题之前,您是否尝试过查找一些关于如何在 c# 中完成 xml 序列化的示例?提示:搜索c# xml serialization
:)
你的函数类需要属性。
公共成员(属性和字段)将被序列化。在 xml 序列化中,它们将成为标签。您可以通过实现ISerializable
来显式地对类进行序列化,并显式地使用 StreamingContext 和 SerializationInfo 对象。
查看反序列化的特殊构造函数:msdn.microsoft.com/en-us/library/…
【参考方案1】:
C# 不像 Java 那样使用 getter 和 setter 方法。像这样创建你的属性:
private string functionname;
public string functionname
get return functionname;
set functionname = value;
【讨论】:
【参考方案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 序列化程序应该会生成您期望的文件。
【讨论】:
以上是关于C#写入XML文件不保存对象的主要内容,如果未能解决你的问题,请参考以下文章