2008-09-09 8 views
0

.Net 2と通常の設定の保存方法を使用しています。私はXMLにシリアル化された私のカスタムオブジェクトを格納します。私はプロパティのデフォルト値を取得しようとしていますが(他のプロパティをリセットすることはありません)。私が使用します。Properties.Settings.Defaultを使用したプロパティの既定値

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

しかし、代わりにValuationInputの文字列を返すように思えるし、それが例外をスローします。

私は正常に動作し迅速なハック、作られた:

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

をしかし、これは本当に醜いです - 私は強く型付けされた設定を定義するために、すべてのツールを使用する場合、私は、デフォルト値をシリアル化する必要はありません私は現在の値を読むのと同じ方法でそれを読んでみたいと思います:ValuationInput valuationInput = Settings.Default.ValuationInput;

答えて

2

設定クラスの中のあなたかラッパーであろうと、どこかで何かがXml逆シリアル化を使用する必要があります。あなたはビジネスロジックから "醜い"コードを取り除く方法でいつもそれを抽象化することができます。

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

2

@Grzenio、

なぜあなたはオブジェクト型を直接使用していませんか? [プロジェクトのプロパティ] - [設定]タブで設定の種類を設定できます。 [タイプ]列の[参照]をクリックしてタイプを選択できます。 MSDNから

引用:

アプリケーション設定は として

あなたが持つことができますこの方法をFromString /シリアライズ可能なXML があるか ToStringメソッドを実装のTypeConverterを持っている任意のデータ型を格納することができ厳密に型付けされた設定、すなわち(ValuationInput)Settings.Default.Properties ["ValuationInput"]。DefaultValue;文字列ではなくオブジェクトを返します。