Valeurs par défaut de la propriété à l'aide de Properties.Settings.Default
Question
J'utilise .Net 2 et la manière normale de stocker mes paramètres.Je stocke mon objet personnalisé sérialisé au format XML.J'essaie de récupérer la valeur par défaut de la propriété (mais sans réinitialiser les autres propriétés).J'utilise:
ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;
Mais il semble renvoyer une chaîne au lieu de ValuationInput et lève une exception.
J'ai fait un hack rapide, qui fonctionne très bien :
string valuationInputStr = (string)
Settings.Default.Properties["ValuationInput"].DefaultValue;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput));
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr));
Mais c'est vraiment moche - lorsque j'utilise tous les outils pour définir un paramètre fortement typé, je ne veux pas sérialiser moi-même la valeur par défaut, j'aimerais la lire de la même manière que je lis la valeur actuelle : ValuationInput valuationInput = Settings.Default.ValuationInput;
La solution
À un moment donné, quelque chose, quelque part devra utiliser la désérialisation XML, que ce soit vous ou un wrapper à l'intérieur de la classe de paramètres.Vous pouvez toujours le résumer dans une méthode permettant de supprimer le code "laid" de votre logique métier.
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
Autres conseils
@Grzenio,
Pourquoi n'utilisez-vous pas directement votre type d'objet ?Vous pouvez définir le type de votre paramètre dans l'onglet Propriétés du projet-> Paramètres.Vous pouvez sélectionner votre type en cliquant sur Parcourir dans la liste déroulante de la colonne Type.
Citation de MSDN :
Les paramètres de l'application peuvent être stockés comme tout type de données qui est sérialisable XML ou a un typonverter qui implémente Tostring / FromString
De cette façon, vous pouvez avoir des paramètres fortement typés, c'est-à-dire(ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue;renverra un objet au lieu d'une chaîne.