С сериализатором xml вы ограничены - он не настолько универсален, как, скажем, некоторые из параметров двоичного форматирования / ISerializable
. Одна частая уловка - иметь второе свойство для сериализации:
[XmlIgnore]
public Uri Uri {get;set;}
[XmlAttribute("uri")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string UriString {
get {return Uri == null ? null : Uri.ToString();}
set {Uri = value == null ? null : new Uri(value);}
}
Два просматриваемых атрибута скрывают его из поля зрения (но он должен быть в общедоступном API, чтобы XmlSerializer
использовал его). XmlIgnore
говорит не пытаться Uri
; и [XmlAttribute(...)]
(или [XmlElement(...)]
) говорит ему переименовать UriString
, когда (де) сериализует его.
(обратите внимание, что EditorBrowsable
применяется только к коду вне сборки, объявляющему тип)