例として、アプリケーションのカスタム構成セクションの一部としてSystem.Version
オブジェクトを直列化および逆直列化したいとします。私は、次のプロパティ宣言でそうしようとしています:ConfigurationProperty属性と一緒に使用すると、プロパティタイプの暗黙的な契約は何ですか?
public class ConfigElement : ConfigurationElement
{
[ConfigurationProperty("ver", IsRequired = false, DefaultValue = "1.2.4.8")]
public Version Ver
{
get { return (Version)this["ver"]; }
set { this["ver"] = value; }
}
}
は残念ながら、(またはDefaultValue
なし)このプロパティをシリアル化または使用しようとすると、次の例外メッセージを生成します。
System.Configuration.ConfigurationErrorsException:プロパティ 'ver'の値を文字列に変換できません。エラーは、 'バージョン'タイプのプロパティ 'ver'の文字列への変換をサポートするコンバータを見つけることができません。
System.Version.ToString()
はSystem.Version.ctor(string)
によって消耗され、よく知られた文字列形式にオブジェクトを書き込むので、このタイプのために存在する「変換」を実現可能と思われます。同様に、System.TimeSpan
タイプは同様のメソッドとファンクション(Parse
in-place .ctor(string)
)を持ち、このタイプは設定システムでうまく機能します(コンバータはすでに存在している必要があります)。
タイプに適したコンバータがあるかどうかを確認するにはどうすればよいですか?どのような契約(暗黙的またはそうでなければ)は、そのようなタイプが満たされなければならないか?
一つの方法は、それをデシリアライズしてかどうかを確認しようとするだろうこの例外が発生します。 –
VersionクラスはXMLシリアル化可能ではなく、すべてのプロパティは読み取り専用です。あなた自身を作る。 –