Как десериализировать bool из Xml с помощью пользовательских значений true и false? - PullRequest
6 голосов
/ 08 октября 2010

Я пытаюсь десериализовать документ Xml в класс C #.Xml выглядит примерно так:

<response>
    <result>Success</result>
</response>

Этот результат может быть только «Успех» или «Неудачный».Когда я десериализую его, я хочу поместить значение в bool с «Success» = true и «Failed» = false.Я не могу понять, как установить истинные и ложные константы, хотя?Код, который я сейчас имею, выглядит следующим образом.

[XmlRoot(ElementName="response")]
public class Response()
{
    [XmlElement(ElementName="result")]
    public bool Result { get; set; }
}

Ответы [ 2 ]

4 голосов
/ 08 октября 2010

Определите еще одно скрытое свойство, которое сделает перевод за вас:

[XmlRoot(ElementName="response")]
public class Response()
{
  [XmlElement(ElementName="result")]
  private string ResultInternal { get; set; }

  [XmlIgnore()]
  public bool Result{
    get{
      return this.ResultInternal == "Success";
    }
    set{
      this.ResultInternal = value ? "Success" : "Failed";
    }
  }
}
0 голосов
/ 08 октября 2010

Одним из решений является определение перечисления следующим образом и добавление метода расширения:

enum SuccessBool
{
    False = -1,
    Failed = -2,
    Failure = -3,
    Unseccessful = -4,                      
    True = 1,
    Success = 2,
    Successful = 3
}

static class SuccessBoolExtenson
{
    public static bool ToBool(this SuccessBool success)
    {
        return (int)success > 0;
    }
}

Это поможет с определением нескольких определений успешных / неудачных, и все типы безопасны.

...