Можно ли привести строковые значения в xml к bool?
Давайте предположим, что у меня есть xml как этот:
<Server Active="No">
<Url>http://some.url</Url>
</Server>
Класс C# выглядит так:
public class Server
{
[XmlAttribute()]
public string Active { get; set; }
public string Url { get; set; }
}
Можно ли изменить свойство Active на тип bool
и XmlSerializer принудительно "Да" "Нет", чтобы bool значения?
Изменить: XML получен, я не могу изменить его. Так что, на самом деле, меня интересует только десериализация.
3 ответа
Решение
Я мог бы посмотреть на второе свойство:
[XmlIgnore]
public bool Active { get; set; }
[XmlAttribute("Active"), Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public string ActiveString {
get { return Active ? "Yes" : "No"; }
set {
switch(value) {
case "Yes": Active = true; break;
case "No": Active = false; break;
default: throw new ArgumentOutOfRangeException();
}
}
}
Да, вы можете реализовать IXmlSerializable, и у вас будет контроль над сериализацией и десериализацией XML
public class Server
{
[XmlAttribute()]
public bool Active { get; set; }
public string Url { get; set; }
}
Предыдущий класс должен оказаться в этой сериализованной форме:
<Server Active="false">
<Url>http://some.url</Url>
</Server>