替代XML序列化配置

drh*_*ris 5 .net c# app-config xml-serialization

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

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

另外,当应用程序出现问题时,由于配置不当,这是9/10次.App.config喜欢将用户可更改的设置存储在非常难以访问的位置,供不熟悉隐藏目录等的用户使用.有没有办法让一个位置存储配置文件,用户可以在出现问题时轻松向我们发送电子邮件?

或者,这是否比我记得它在2.0天的早期更容易?有关如何轻松执行自定义app.config信息的任何链接或快速示例都会很棒.

作为另一个例子,这是我想要序列化的一种对象类型的精简版本List<Alarm>,因为Alarms 的数量可以变化或为空.有没有类似的方法在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; }
}
Run Code Online (Sandbox Code Playgroud)

Not*_*tMe 7

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

恕我直言,配置设置不应该是用户设置的默认容器.对我来说,配置文件用于确保应用程序在给定环境中运行.例如,定义连接字符串或轮询率或具有该性质的事物.

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

您给出的示例之一是配置似乎是一个或多个警报的示例,它是属于数据库表的某些内容的完美示例.