gpt4 book ai didi

c# - 配置的 XML 序列化的替代方案

转载 作者:太空狗 更新时间:2023-10-29 22:24:46 29 4
gpt4 key购买 nike

目前,我们使用一个巨大的配置对象,它被序列化为 XML 或从 XML 序列化。这在大多数情况下都运行良好,但我们发现在断电和应用程序崩溃的情况下,文件可能会处于无法正确反序列化的状态,从而有效地破坏配置信息。

我想使用内置的 app.config,但它似乎不太容易支持自定义类。例如,使用 XML 序列化,我可以轻松地序列化一个通用的 list<ComplexClass>没有额外的代码。它只是工作。似乎在使用 app.config 时,您必须提供大量信息和自定义类才能使其正常工作。另外,大多数“自定义配置”教程大约来自 2007 年,据我所知可能已经过时了。有没有人知道在 .NET 4.0 中执行此操作的最新方法?

此外,当应用程序出现问题时,9/10 的时间是因为配置不当。 App.config 喜欢将用户可更改的设置存储在一个非常难以访问的位置,以供不熟悉隐藏目录等的用户使用。有什么方法可以让配置文件存储在一个位置,以便用户在出现问题时可以轻松地通过电子邮件发送给我们?

或者,这一切是否比我内存中的 2.0 早期更容易?任何有关如何轻松执行自定义 app.config 信息的链接或快速示例都很棒。

作为进一步的示例,这是我要序列化为 List<Alarm> 的一种对象类型的简化版本。 , 作为数量 Alarm s 可以变化或为空。有没有类似的方法在 app.config 中存储这样的东西?

[Serializable]
public class Alarm
{
[Serializable]
public class AlarmSetting
{
public enum AlarmVariables { Concentration, RSquared }
public enum AlarmComparisons { LessThan, GreaterThan }

[Description("Which entity is being alarmed on.")]
public AlarmVariables Variable { get; set; }
[Description("Method of comparing the entity to the setpoint.")]
public AlarmComparisons Comparator { get; set; }
[Description("Value at which to alarm.")]
public Double Setpoint { get; set; }
}

public String Name { get; set; }
public Boolean Enabled { get; set; }
public String Parameter { get; set; }
public List<AlarmSetting> AlarmSettings { get; set; }
public System.Drawing.Color RowColor { get; set; }
}

最佳答案

我建议远离任何类型的配置文件,而是使用某种类型的本地数据库,例如 sqlite或 sql server express,它对应用程序崩溃更有弹性。

恕我直言,配置设置不应该是用户 设置的默认容器。对我来说,有一个配置文件可以确保应用程序在给定的环境中运行。例如,定义连接字符串或轮询率或类似性质的东西。

用户设置,尤其是经常更改的设置,需要更好的存储机制,例如本地数据库。当然,除非它是一个客户端/服务器应用程序。在这种情况下,这些设置应该在服务器本身启动,并且只有在应用程序必须在断开连接的状态下工作时才会在本地保留。

你给出的例子,其中一个配置似乎是一个或多个警报是属于数据库表的东西的完美例子。

关于c# - 配置的 XML 序列化的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153386/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com