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文件不保存对象的主要内容,如果未能解决你的问题,请参考以下文章

C#读取并写入XML文件

不覆盖 C# 窗口窗体中保存的 xml 文件

保存数据到文件的模块(configparser,json,pickle,shelve,xml)_python

使用 C# 使用特殊字符写入 XML 文档

C#读取和写入XML文件

如何将目录列表保存到xml文件C#