Come memorizzare un elenco di oggetti nelle impostazioni dell’applicazione

Recentemente ho acquisito familiarità con le impostazioni dell’applicazione C # e mi sembra interessante.
Stavo cercando un modo per memorizzare un elenco di oggetti personalizzati, ma non sono riuscito a trovare un modo!
In realtà ho visto un post per memorizzare int [] , ma non è stato utile per questo problema.
Ho provato a cambiare la configurazione di quella soluzione per renderla adatta al mio problema. il file di configurazione XML di quello era:

   

Ho provato ad indirizzare il mio object come riportato di seguito nell’attributo type ma non è stato utile poiché non riconosce il mio object … Ho provato “type = List” e “type =” tuple [] ”
entrambe queste opzioni non mi hanno aiutato!

Ho una class simile a:

 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; } } 

e voglio memorizzare un elenco nelle impostazioni dell’applicazione.
Quindi c’è un modo per raggiungere questo scopo.
Grazie in anticipo.
Saluti,

    È ansible utilizzare BinaryFormatter per serializzare l’elenco di tuple come array di byte e Base64 (come modo abbastanza efficiente) per memorizzare l’array di byte come string .

    Prima di tutto cambia la tua class in qualcosa di simile (suggerimento: [SerializableAttribute] ):

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

    Aggiungi proprietà nelle impostazioni denominate tuples e tipo di string .

    tuple in Impostazioni

    Quindi è ansible utilizzare due metodi per caricare e salvare un elenco generico di tuple ( 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); } } 

    Esempio:

     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(); 

    Lascio null , stringa vuota ed eccezione verificandole.

    La configurazione dell’applicazione non è la scelta giusta per la memorizzazione dei dati al runtime dell’applicazione. Per questo utilizzare qualsiasi opzione disponibile in serializzazione .NET come

    • Serializzazione Xml
    • Serializzazione binaria con proto-buf
    • Serializzazione Json
    • Mappatura ORM ad un database Sqlite di Embedde

    e molti altri…

    Non sono sicuro che ciò che si vuole fare sia fatto meglio nelle impostazioni dell’applicazione. Quello che potresti voler esaminare è XDocument e memorizzare i valori necessari in un file di configurazione separato.

    È ansible scrivere tipi personalizzati per estendere i file .config . Ma questo non memorizzerà i tuoi tipi arbitrari in una sezione esistente di conferma ma aggiungendo sezioni personalizzate.

    Un tipo di configurazione personalizzato potrebbe, fornendo una logica completamente personalizzata per i nodes figlio, contenere dati serializzati XML. Direi che questo è un abuso del sistema di configurazione: è per la memorizzazione delle impostazioni non stato completo.

    Se questo è quello che vuoi, c’è un semplice esempio nella documentazione di ConfigurationSection .