0

私は.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;

4

2 に答える 2

2

@Grzenio、

オブジェクト型を直接使用しないのはなぜですか? [プロジェクト プロパティ] -> [設定] タブで、設定のタイプを設定できます。[タイプ] 列のドロップダウンで [参照] をクリックして、タイプを選択できます。

MSDN からの引用:

アプリケーション設定は、XML シリアライズ可能な任意のデータ型、または ToString/FromString を実装する TypeConverter を持つ任意のデータ型として保存できます。

そうすれば、強く型付けされた設定、つまり (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue; を持つことができます。文字列ではなくオブジェクトを返します。

于 2008-09-09T12:45:14.327 に答える
2

ある時点で、それがあなたであろうと、設定クラス内のラッパーであろうと、どこかで Xml Deserialization を使用する必要があります。ビジネスロジックから「醜い」コードを削除するメソッドで、いつでも抽象化できます。

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

于 2008-09-09T12:29:14.303 に答える