在C Sharp中做持久性的最好方法是什么?

时间:2011-01-12 09:31:23

标签: c# persistence

我需要在我的应用程序中保存少量的GUI属性。 属性很简单(窗口大小,窗口颜色,ext ...),它们需要存储在文件中(可以是XML或二进制)。

我不确定我知道编写代码的最佳方式是什么? 它是简单的XML还是序列化?

有一些例子吗?

感谢。

6 个答案:

答案 0 :(得分:2)

我建议使用IsolatedStorage来存储应用程序运行时设置:

IsolatedStorageSettings appSettings= IsolatedStorageSettings.ApplicationSettings;
appSettings.Add(<Control.PropertyName>, <Value>);

答案 1 :(得分:2)

将值存储在web.config文件中。这是一个例子:

<appSettings>
  <add key="size" value="100" />

编辑:由于它看起来像是一个Windows应用程序,因此可以使用App.config文件。

答案 2 :(得分:2)

这是我存储应用程序设置的首选方式,希望有所帮助

public class Settings
{
    public int WindowWidth { get; set; }

    public int WindowHeight { get; set; }

    public int FullscreenAsDefault { get; set; }
}

然后在任何适用于应用类型的主类中:

    public Settings Settings { get; set; }

    public void OnOpen()
    {
        if ( !File.Exists( "Settings.xml" ) )
        {
            // init settings
            this.Settings = new Settings()
            {
                FullscreenAsDefault = false,
                WindowHeight = 500,
                WindowWidth = 700
            };
        }
        else
        {
            // load settings
            XmlSerializer xmlSerializer = new XmlSerializer( typeof( Settings ) );
            Settings = xmlSerializer.Deserialize( new FileStream( "Settings.xml", FileMode.Open ) ) as Settings;
        }
    }

    public void OnClose()
    {
        // save settings
        XmlSerializer xmlSerializer = new XmlSerializer( typeof( Settings ) );
        xmlSerializer.Serialize( new FileStream( "Settings.xml", FileMode.Create ), this.Settings );
    }

答案 3 :(得分:1)

如果它们作为属性存储在类中,例如Settings,您可以将其序列化为磁盘(您选择的二进制或xml)。

反序列化此文件以在应用程序启动时返回Settings对象。如果该文件不存在,请创建一个新的Settings对象并序列化默认值。

答案 4 :(得分:1)

我建议使用XML,因为它是“人类可读的”,可以使用普通工具进行操作/查看。

真正简单的方法是使用DataContractSerializer。该链接显示了如何定义要序列化的实体以及如何轻松序列化。还有ISerialiazableXmlSerializer等,但为什么DCS如此简单呢? : - )

答案 5 :(得分:0)

您可以使用普通的旧INI文件来存储非敏感值。您可以使用Nini(http://nini.sourceforge.net/)来读取和写入INI文件。 .NET框架不提供任何内置库来处理INI文件。