作爲示例,我想序列化並反序列化一個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'的值不能轉換爲字符串。錯誤是:找不到類型爲'Version'的屬性'ver'支持轉換爲字符串的轉換器。
System.Version.ToString()
將對象寫入可以被System.Version.ctor(string)
使用的衆所周知的字符串格式,因此對於這種類型的「轉換器」來說似乎是可行的。相比之下,System.TimeSpan
類型具有類似的方法和功能(Parse
就位於.ctor(string)
),並且該類型與配置系統(轉換器必須已經存在)配合良好。
如何知道類型是否有合適的轉換器?什麼合同(隱含的或其他的)必須滿足這種類型?
一種方法是嘗試反序列化一下,看看是否你會得到這個例外。 –
Version類不是XML可串行的,其所有屬性都是隻讀的。做你自己的。 –