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;

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top