簡體   English   中英

C#:從文件導入/導出設置

[英]C#: Import/Export Settings into/from a File

從應用程序內部將應用程序內部設置導入/導出到文件的最佳方法是什么?

我有 Settings.settings 文件,winform UI 綁定到設置文件,我想導入/導出設置,類似於 Visual Studio 導入/導出設置功能。

如果您使用的是 Settings.settings 文件,它會保存到配置文件中。 通過在更新您的設置后調用 YourNamespace.Properties.Settings.Save(),它們將被保存到配置文件中。

但是,我不知道您所說的“多組設置”是什么意思。 如果設置是用戶設置,則每個用戶都有自己的一組設置。 如果您為單個用戶設置多組設置,您可能不應該使用 .settings 文件; 相反,您需要使用數據庫。

您可以使用綁定到表單的數據集。 您可以保存/恢復它。

您可以只使用部分,還是由於特定原因而中斷到其他文件?

我使用的一種久經考驗的方法是設計一個設置容器類。 這個容器類可以有不同類型的設置類別的子類。 它運行良好,因為您通過屬性名稱引用了您的“設置”,因此如果將來發生某些變化,您將收到編譯時錯誤。 它也是可擴展的,因為您始終可以通過向各個設置類添加更多屬性來創建新設置,並將默認值分配給將在舊版本應用程序中不存在該特定設置時使用的屬性的私有變量。 保存新容器后,新設置也將保留。 另一個優點是 XML 明顯的人類/計算機可讀性,這對設置非常有用。

要保存,請將容器對象序列化為 XML 數據,然后將數據寫入文件。 要加載,請從文件中讀取數據並將其反序列化回您的設置容器類。

通過標准 C# 代碼序列化:

public static string SerializeToXMLString(object ObjectToSerialize)
MemoryStream mem = new MemoryStream();          
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ObjectToSerialize.GetType());
ser.Serialize(mem,ObjectToSerialize);                       
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());

通過標准 C# 代碼反序列化:

public static object DeSerializeFromXMLString(System.Type TypeToDeserialize, string xmlString)
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);         
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(TypeToDeserialize);
return ser.Deserialize(mem);

關於可序列化設置類的最后一個好處是因為它是一個對象,您可以使用 IntelliSense 快速導航到特定設置。

注意:在實例化設置容器類后,您應該將其設為另一個靜態管理類的靜態屬性(如果需要,您可以將其稱為 SettingsManager)該管理類允許您從應用程序的任何位置訪問您的設置(因為它是靜態的) 並且您還可以使用靜態函數來處理類的加載和保存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM