Frage

Ich verwende .Net 2 und die normale Methode zum Speichern meiner Einstellungen.Ich speichere mein benutzerdefiniertes Objekt serialisiert in XML.Ich versuche, den Standardwert der Eigenschaft abzurufen (aber ohne andere Eigenschaften zurückzusetzen).Ich benutze:

ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;

Aber es scheint eine Zeichenfolge anstelle von ValuationInput zurückzugeben und eine Ausnahme auszulösen.

Ich habe einen schnellen Hack gemacht, der gut funktioniert:

string valuationInputStr = (string) 
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));

Aber das ist wirklich hässlich – wenn ich das gesamte Tool verwende, um eine stark typisierte Einstellung zu definieren, möchte ich den Standardwert nicht selbst serialisieren, sondern ihn auf die gleiche Weise lesen, wie ich den aktuellen Wert lese: ValuationInput valuationInput = Settings.Default.ValuationInput;

War es hilfreich?

Lösung

Irgendwann muss irgendetwas, irgendwo, die XML-Deserialisierung verwenden, egal, ob Sie es sind oder ein Wrapper innerhalb der Einstellungsklasse.Sie könnten es jederzeit in einer Methode abstrahieren, um den „hässlichen“ Code aus Ihrer Geschäftslogik zu entfernen.

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

Andere Tipps

@Grzenio,

Warum verwenden Sie Ihren Objekttyp nicht direkt?Sie können den Typ Ihrer Einstellung auf der Registerkarte Projekteigenschaften -> Einstellungen festlegen.Sie können Ihren Typ auswählen, indem Sie in der Dropdown-Liste „Typ“ auf „Durchsuchen“ klicken.

Zitat aus MSDN:

Anwendungseinstellungen können als Datentyp gespeichert werden, der serialisierbar ist oder über einen Typenkonvers verfügt, der das ToString/Fromstring implementiert

Auf diese Weise können Sie stark typisierte Einstellungen vornehmen, d. h.(ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;gibt ein Objekt anstelle einer Zeichenfolge zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top