В качестве примера я хотел бы сериализовать и десериализовать объект 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' не может быть преобразовано в строку. Ошибка: Невозможно найти конвертер, который поддерживает преобразование в / из строки для свойства 'ver' типа 'Версия'.
System.Version.ToString()
записывает объект в общеизвестный строковый формат, который может использоваться System.Version.ctor(string)
, поэтому для этого типа вполне возможно существование "преобразователя". Для сравнения, тип System.TimeSpan
имеет аналогичные методы и функции (Parse
вместо .ctor(string)
), и этот тип хорошо работает с системой конфигурации (конвертер уже должен существовать).
Как узнать, есть ли у типа подходящий конвертер? Какому договору (неявному или иному) должен удовлетворять такой тип?