7

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

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

目前我存储的最复杂的将是一个列表,其中包含一个需要存储文件名、比较算法和参数文本的条目。因此,这不仅仅是简单的键/值数据。

我正在寻找有关以下方面的想法:

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

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

我目前正在寻找为每个不同的集合使用 XmlDocument 和单独的类。但我觉得应该已经有一些现有的框架。

谢谢!

4

2 回答 2

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

注意:这需要 .Net 4.0+

本示例中给出了快速入门。

于 2013-08-23T06:17:00.810 回答
2

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

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

于 2013-08-23T15:57:41.457 回答