Properties.Settings.Default を使用したプロパティのデフォルト値
質問
私は .Net 2 を使用しており、設定を保存する通常の方法を使用しています。カスタム オブジェクトを XML にシリアル化して保存します。プロパティのデフォルト値を取得しようとしています(ただし、他のプロパティはリセットしません)。私が使う:
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;
解決
ある時点で、あなたであろうと、設定クラス内のラッパーであろうと、どこかで、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
他のヒント
@グルゼニオ
オブジェクトタイプを直接使用してみてはいかがでしょうか?設定のタイプは、「プロジェクトのプロパティ」->「設定」タブで設定できます。[タイプ] 列の [参照] ドロップダウンをクリックしてタイプを選択できます。
MSDN からの引用:
アプリケーション設定は、XMLシリアル化可能なデータ型として保存できます。
そうすることで、厳密に型指定された設定を持つことができます。(ValuationInput)Settings.Default.Properties["ValuationInput"].DefaultValue;文字列の代わりにオブジェクトを返します。