是否存在将UI设置存储在文件中的最佳实践?

Jas*_* S. 7 c# settings user-interface configuration-files

我还没有看到满意的答案,所以我想问一下.是否有将UI设置存储在文件中的最佳实践?

场景是我们有一个内部C#应用程序,我想存储一个文件/文件夹数组以及其他随机的东西(执行外部命令时使用的标志,传递给可选择的比较算法的可选参数等).由于这些值的性质,使用内置的app.config方法是行不通的.那么在将半复杂设置存储到设置文件时是否有任何最佳实践?

目前我存储的最复杂的是一个列表,其中包含一个需要存储文件名,比较算法和参数文本的条目.因此,并非所有简单的键/值数据都是如此.

我正在寻找关于:

  • 布局(例如,如果XML,值应该在属性vs node.value中)
  • 格式(XML,YAML等)
  • 构架

这不会存储敏感数据,因此安全性不是问题.

我目前正在寻找只使用XmlDocument并为每个不同的集合分离类.但我觉得应该有一些现有的框架.

谢谢!

Viv*_*ain 10

你不应该将这些设置存储在app.config文件中.它只是增加了混乱.在这种情况下,最好像在票证中提到的那样创建另一个配置文件.

您计划将此配置文件构造为XML文档.这是一个好主意.这也意味着您的配置数据是结构化的.这也很棒.

我建议你去JSON.这将允许您在运行时使用非常少的代码行将配置设置加载到您的应用程序中.试试NewtonSoft.JSON(又名JSON.Net).

您可以按照以下步骤快速添加和使用配置设置:

  1. 使用Nuget包管理器安装NewtonSoft.JSON
  2. 将此库的引用添加到项目和.cs文件中(使用NewtonSoft.Json)
  3. 为配置设置创建一个C#类.对于您可能使用的重复块List<string>或任何其他相关数据类型,即使int- 因此您也不必进行任何类型转换.
  4. 将JSON文件读入字符串对象
  5. 使用JsonConvert.DeserializeObject()如:

MyConfigSettings settings = JsonConvert.DeserializeObject<MyConfigSettings>(jsonString);

MyConfigSettings是配置设置类.必须将相应的成员声明为public具有已get; set;定义的适当属性的属性.

这会将所有配置设置加载到settings对象.最好的部分是,任何缺少的配置值都将被自动跳过,因此您不必拥有任何复杂的解析算法.

要将配置值写入JSON文件,您可以在settings对象中填充值并使用以下命令对其进行序列化:

// Indented so that it looks readable when the config file is opened in editor like Notepad
string data = JsonConvert.SerializeObject<MyConfigSettings>(settings, Formatting.Indented);
// Now just store string object data to the config file
Run Code Online (Sandbox Code Playgroud)

注意:这需要.Net 4.0+

这个例子给出了一个快速入门.


Jas*_*son 2

如果您不想弄乱 app.config,您还可以定义自定义配置部分,然后将设置放入单独的配置文件中。自定义配置模块允许您为自己的复杂设置定义结构并将它们存储在标准配置文件中。如果您使用过实体框架、企业库等,那么您可能已经在文件顶部看到它们的定义。在 Google 上快速搜索后,发现了另一篇关于该主题的 StackOverflow 帖子。

如何在 app.config 中创建自定义配置部分