Valori predefiniti della proprietà utilizzando Properties.Settings.Default
Domanda
Sto utilizzando .Net 2 e il modo normale per memorizzare le mie impostazioni.Memorizzo il mio oggetto personalizzato serializzato in xml.Sto cercando di recuperare il valore predefinito della proprietà (ma senza reimpostare altre proprietà).Io uso:
ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;
Ma sembra restituire una stringa invece di ValuationInput e genera un'eccezione.
Ho fatto un trucco veloce, che funziona bene:
string valuationInputStr = (string)
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));
Ma questo è davvero brutto: quando utilizzo tutto lo strumento per definire un'impostazione fortemente tipizzata, non voglio serializzare io stesso il valore predefinito, vorrei leggerlo nello stesso modo in cui leggo il valore corrente: ValuationInput valuationInput = Settings.Default.ValuationInput;
Soluzione
Ad un certo punto, qualcosa, da qualche parte, dovrà utilizzare la deserializzazione Xml, che tu o un wrapper all'interno della classe delle impostazioni.Potresti sempre astrarlo in un metodo per rimuovere il codice "brutto" dalla tua logica aziendale.
public static T FromXml<T>(string xml)
{
XmlSerializer xmlser = new XmlSerializer(typeof(T));
using (System.IO.StringReader sr = new System.IO.StringReader(xml))
{
return (T)xmlser.Deserialize(sr);
}
}
http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx
Altri suggerimenti
@Grzenio,
Perché non usi direttamente il tuo tipo di oggetto?Puoi impostare il tipo di impostazione nella scheda Proprietà progetto->Impostazioni.Puoi selezionare il tipo facendo clic su Sfoglia nel menu a discesa per la colonna Tipo.
Citazione da MSDN:
Le impostazioni dell'applicazione possono essere memorizzate come qualsiasi tipo di dati che è serializzabile XML o ha un TypeConverter che implementa ToString/FromString
In questo modo puoi avere impostazioni fortemente tipizzate, ad es.(ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;restituirà un oggetto invece di una stringa.