Можно ли привести строковые значения в xml к bool? - PullRequest
3 голосов
/ 24 марта 2010

Предположим, у меня есть 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 принудительно "Да" "Нет" вводить значения?

Редактировать : XML получен, я не могу его изменить. Так что, на самом деле, меня интересует только десериализация.

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

Я мог бы посмотреть на второе свойство:

[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();
        }
    }
}
2 голосов
/ 24 марта 2010

Да, вы можете реализовать IXmlSerializable , и у вас будет контроль над сериализацией и десериализацией XML

0 голосов
/ 24 марта 2010
public class Server
{
   [XmlAttribute()]
   public bool Active { get; set; }

   public string Url { get; set; }
}

Предыдущий класс должен получить сериализованную форму:

<Server Active="false">
    <Url>http://some.url</Url>
</Server>
...