當前,我們使用一個巨大的配置對象,該對象被序列化到XML中或從XML中序列化。這在大多數情況下工作得很好,但是我們發現,在斷電和應用程序崩潰的情況下,文件可能處於一種狀態,導致它無法正確反序列化,從而有效破壞配置信息。用於配置的XML序列化的替代方案
我想使用內置的app.config,但它似乎並不輕鬆支持自定義類。例如,使用XML序列化,我可以輕鬆地序列化一個通用的list<ComplexClass>
而不需要額外的代碼。它只是工作。看起來,當使用app.config時,你必須提供大量的信息和自定義類才能工作。另外,大多數「自定義配置」教程都是從2007年左右開始的,而且我可能已經過時了。有沒有人有最新的方式來在.NET 4.0中做到這一點的信息?
另外,當應用程序出現問題時,9/10次是因爲配置不當造成的。對於不熟悉隱藏目錄等的用戶,App.config喜歡將用戶可更改的設置存儲在非常難以訪問的位置。有什麼辦法可以讓一個位置存儲配置文件,當出現問題時用戶可以輕鬆發送電子郵件給我們。或者,比我記得它在2.0天初期更容易嗎?任何關於如何輕鬆完成自定義app.config信息的鏈接或快速示例都會很棒。
作爲進一步的示例,這是由於Alarm
的數量可以變化或爲空而我想序列化爲List<Alarm>
的對象類型之一的削減版本。有沒有類似的方式在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; }
}
最佳做法將取決於許多不同的東西,如你到底有什麼樣的應用? – NotMe 2010-06-30 21:06:32
這是一個WinForms應用程序。 – drharris 2010-06-30 21:08:30
您是否嘗試編寫XML文件「transactional」? I.E.將其寫入文件「newconfig.xml」,並在寫入正確時,將「config.xml」重命名爲「oldconfig.xml」,將「newconfig.xml」重命名爲「config.xml」。即使這兩個重命名操作之間存在斷電,如果沒有「config.xml」,您可以使用「oldconfig.xml」輕鬆實現回退策略。 – 2010-06-30 21:10:06