如何在应用程序设置中存储对象列表

我最近熟悉了C#应用程序设置,看起来很酷。
我正在寻找一种存储自定义对象列表的方法,但我找不到方法!
实际上我看到了一个存储int []的post ,但它对这个问题没有帮助。
我试图更改该解决方案的配置,以使其适合我的问题。 那个XML配置文件是:

   

我尝试在type属性中引用我的对象,但它没有帮助,因为它没有识别我的对象…我试过“type = List”和“type =”tuple []“
这两个选项都没有帮助我!

我有一堂课看起来像:

 class tuple { public tuple() { this.font = new Font ("Microsoft Sans Serif",8); this.backgroundcolor_color = Color.White; this.foregroundcolor_color = Color.Black; } public string log { get; set; } public Font font { get ; set; } public String fontName { get; set; } public string foregroundcolor { get; set; } public Color foregroundcolor_color { get; set; } public string backgroundcolor { get; set; } public Color backgroundcolor_color { get; set; } public Boolean notification { get; set; } } 

我想在应用程序设置中存储一个列表。
那么有没有办法达到这个目的。
提前致谢。
干杯,

您可以使用BinaryFormatter将元组列表序列化为字节数组,并使用Base64(作为非常有效的方式)将字节数组存储为string

首先将您的类更改为类似的东西(提示: [SerializableAttribute] ):

 [Serializable()] public class tuple { public tuple() { this.font = new Font("Microsoft Sans Serif", 8); //.... } 

在名为tuples设置和string类型中添加属性。

“设置”中的元组

然后,您可以使用两种方法来加载和保存元组的通用列表( List ):

 void SaveTuples(List tuples) { using (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, tuples); ms.Position = 0; byte[] buffer = new byte[(int)ms.Length]; ms.Read(buffer, 0, buffer.Length); Properties.Settings.Default.tuples = Convert.ToBase64String(buffer); Properties.Settings.Default.Save(); } } List LoadTuples() { using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(Properties.Settings.Default.tuples))) { BinaryFormatter bf = new BinaryFormatter(); return (List)bf.Deserialize(ms); } } 

例:

 List list = new List(); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); // save list SaveTuples(list); // load list list = LoadTuples(); 

我留空,空字符串和exception检查由你决定。

应用程序配置不是在应用程序运行时存储数据的好选择。 为此使用.NET序列化选项中的任何可用选项

  • Xml序列化
  • 使用proto-buf进行二进制序列化
  • Json序列化
  • ORM映射到一些嵌入式数据库Sqlite

和许多其他人……

我不确定你最想做的是在应用程序设置中做得最好。 您可能想要查看的是XDocument,并将您需要的值存储在单独的配置文件中。

您可以编写自定义类型来扩展.config文件。 但是,这不会将您自己的任意类型存储在现有的确认部分中,而是添加自定义部分。

通过为子节点提供完全自定义逻辑,自定义配置类型可以保存XML序列化数据。 我认为这是滥用配置系统:它用于存储设置不完整的状态。

如果这是你想要的, ConfigurationSection的文档中有一个简单的例子。