作为一个例子,我想序列化和反序列化一个
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
类型具有类似的方法和函数(在.ctor(string)
处使用Parse
),并且该类型与配置系统配合良好(转换器必须已经存在)。
我如何知道某个类型是否具有适当的转换器?这种类型必须满足什么契约(隐式或明示)?