将我的变量类保存到 XML 文件

Posted

技术标签:

【中文标题】将我的变量类保存到 XML 文件【英文标题】:Saving a Class of my variables to XML File 【发布时间】:2016-01-08 12:38:51 【问题描述】:

我创建了一个名为“VNCVars.cs”的类,我希望能够将与 VNCVars 中的所有变量关联的数据保存到 XML 文件中,以便在启动时将它们重新加载。我有另一个名为“SaveData.cs”的类,其中包含生成 XML 文件的代码。

我编写了可以运行的代码,但我的 XML 文件始终为空.....有人能指出我错过了什么吗??

public class VNCVars

    //Global Variables for VNC 1 Location
    //VNC File Location 1 Get and Set routines
    private static string strVNC1Location;
    public static string VNC1Location
    
        get  return strVNC1Location; 
        set  strVNC1Location = value; 
    


    //Global Variables for VNC 2 Location
    //VNC File Location 2 Get and Set routines
    private static string strVNC2Location;
    public static string VNC2Location
    
        get  return strVNC2Location; 
        set  strVNC2Location = value; 
    


    //Global Variables for VNC 3 Location
    //VNC File Location 3 Get and Set routines
    private static string strVNC3Location;
    public static string VNC3Location
    
        get  return strVNC3Location; 
        set  strVNC3Location = value; 
    


public class SaveXML


    public static void SaveData()
    
        var SaveData = new VNCVars();

        XmlSerializer sr = new XmlSerializer(typeof(VNCVars));
        TextWriter writer = new StreamWriter(@"c:\Fanuc\SetupVars.xml");
        sr.Serialize(writer, SaveData);
        writer.Close();
    



最后在我的表单上,我目前只有一个按钮,点击后会出现以下情况...

    private void button2_Click(object sender, EventArgs e)
    
        SaveXML.SaveData();
    

非常感谢任何帮助....

【问题讨论】:

你不能使用这样的静态字段序列化一个类。使字段非静态。 我只是想说构造函数在哪里 如果我将它们设为非静态,那么我将无法从我拥有的每个表单(即 VNCVars.VNC1Location)中访问变量。对于基本问题,我很抱歉,但我对 C# 编程相当陌生。 【参考方案1】:

您应该使用实例属性而不是静态属性。

然后您可以使用单例模式只保留此类的一个实例。

【讨论】:

Singleton 在 C# 中:msdn.microsoft.com/en-gb/library/ff650316.aspx。注意:单例在许多情况下被认为是一种反模式,所以请谨慎使用:***.com/questions/137975/…。根据您的情况,考虑Dependency Injection:gameprogrammingpatterns.com/singleton.html【参考方案2】:

如果你需要有静态变量并且不想让这个类成为单例,解决方法是包装静态变量:

[XmlElement("VNC1Location")]
public string VNC1LocationLocal

    get
    
        return VNC1Location;
    
    set
    
        VNC1Location = value;
    

【讨论】:

好的,我已将它添加到我的 VNCVars 类中,当我生成 XML 文件时,VNC1LocationLocal 就在那里,其中包含我输入到公共静态字符串 VNCLocation1 中的值。以及私有静态字符串 strVNC1Location;公共静态字符串 VNC1Location 获取 返回 strVNC1Location; 设置 strVNC1Location = 值; 我需要对应的公共字符串 VNC1LocationLocal get return VNC1Location; 设置 VNC1Location = 值; 让它工作?? 是的,您需要VNC1LocationLocal 属性(名称无关)来序列化VNC1Location 静态属性。我忘了我的代码会在 xml 中生成 <VNC1LocationLocal> 元素。您需要使用所需的 xml 名称添加 XmlElement 属性以生成正确的 xml。我已经更正了我的答案。 它对你有用吗?或者您还有其他问题?

以上是关于将我的变量类保存到 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的位置保存在全局变量中

如何将对象的参数从后端保存到新变量中?

PHP:$_SESSION 变量未传递到下一个网页

将节点添加到XML变量并保存

将变量保存到 vb.net 中的文本文件

为啥 ajax 不将我的 JS 变量发送到 PHP?