Как к (xml) сериализируют uri

Некоторые сноб-кодеры смотрят на них свысока как на прославленную глобализацию. Точно так же, как многие люди ненавидят утверждение goto , есть и другие, которые ненавидят идею когда-либо использовать глобальный . Я видел, как несколько разработчиков пошли на экстраординарную работу, чтобы избежать глобального , потому что они рассматривали возможность использования одного из них как допущение неудачи. Странно, но это правда.

На практике паттерн Singleton - это просто метод программирования, который является полезной частью вашего набора концепций. Время от времени вы можете обнаружить, что это идеальное решение, и поэтому используйте его. Но использовать его просто так, чтобы вы могли похвастаться использованием шаблона проектирования , так же глупо, как отказываться от его использования, потому что это всего лишь глобальный .

16
задан Marc Gravell 24 June 2009 в 07:03
поделиться

4 ответа

С сериализатором xml вы ограничены - он не такой универсальный, как (скажем) некоторые из параметров binaryformatter / 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 применяется только к коду вне сборки, объявляющей тип)

32
ответ дан 30 November 2019 в 16:05
поделиться

Реализуйте IDeserializationCallback и используйте это поле самостоятельно.

http://msdn.microsoft.com/en-us/library/system .runtime.serialization.ideserializationcallback.aspx

0
ответ дан 30 November 2019 в 16:05
поделиться

Класс Uri реализует интерфейс ISerializable , поэтому он должен иметь возможность позаботиться о сериализации / десериализации.

0
ответ дан 30 November 2019 в 16:05
поделиться

Uri уже поддерживает сериализацию, поэтому я не верю, что вам нужно что-то делать.

http://msdn.microsoft.com/en-us/library/system.uri ( VS.80) .aspx

-1
ответ дан 30 November 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: