Gestire le impostazioni di un applicazione Windows grazie alle nuove classi presenti in System.Configuration e l'ottima integrazione in Visual Studio 2005 è diventato un gioco da ragazzi.
Ma se volessi memorizzare nei settings un intera classe?, a prima vista quando vado a definire un nuovo Setting ho a disposizione una lunga serie di alternative oltre ai classici tipi base: int,string, etc... e, selezionando "Browse..." ho a disposizione svariati tipi definiti nel framework e serializzabili.
Poco chiaro è il fatto che nella finestra "Browse..." posso aggiungere anche i miei tipi, a patto che:

  • Il tipo sia definito in un assembly separata da quella che memorizzerà i settings
  • Il tipo sia serializzabile (ad esempio attraverso un custom TypeConverter)

Per memorizzare un istanza di un ipotetica classe Person, definita in un assembly ServerLib.dll, basta decorare la classe con il relativo custom TypeConverter (in questo caso MyPersonConverter)

namespace ServerLib
{
  [TypeConverter(typeof(MyPersonConverter
))]
  public class
Person
  {
   public Person (string name, int age){...}
  
   //Proprietà Name e Age...
  }
}

Dopodichè andare nella gestione impostazioni di Visual Studio, definire la nuova impostazione (es: MyPerson), come Type selezionare "Browse..." e nella casella di testo inserire Namespace.Classname (es: ServerLib.Person)
A questo punto possiamo scrivere:

//Save
Properties.
Settings.Default.MyPerson = new ServerLib.Person("Giulia", 2);
Properties.
Settings
.Default.Save();

//Load
ServerLib.Person p = Properties.Settings
.Default.MyPerson;

Se volete approfondire il concetto, qui trovate un esempio completo (VB e C#)