System.Version
例として、アプリケーションのカスタム構成セクションの一部としてオブジェクトをシリアライズおよびデシリアライズしたいと考えています。次のプロパティ宣言でそうしようとしています:
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' の値を文字列に変換できません。エラー: タイプ 'Version' のプロパティ 'ver' の文字列との間の変換をサポートするコンバーターが見つかりません。
System.Version.ToString()
はオブジェクトを、 によって消費可能なよく知られた文字列形式に書き込みますSystem.Version.ctor(string)
。そのため、この型に対して「コンバーター」が存在する可能性があるようです。同様に、System.TimeSpan
型には同様のメソッドと関数 (Parse
の代わりに.ctor(string)
) があり、型は構成システムとうまく連携します (コンバーターが既に存在している必要があります)。
型に適切なコンバーターがあるかどうかを知るにはどうすればよいですか? そのような型が満たさなければならない契約 (暗黙的またはその他) は何ですか?