Как десериализовать Nullable ‹bool›?

Я пытаюсь десериализовать Nullable<bool> из моего файла XML. Я ожидал, что XMLAttribute, который не был найден в моем XMLElement, будет null, а если он найден, он будет trueили false. То же самое и для сериализации. Моя переменная будет записана, если она не равна нулю.

В любом случае, каждый раз, когда я пытаюсь десериализовать свой XML, будет выдано InvalidOperationException.

Мой класс выглядит так

[XMLArray("Users")]
public class User
{
    [XMLAttribute("copy")]
    public bool? copy;
}

Любые идеи?


person theknut    schedule 30.07.2012    source источник
comment
Взгляните на этот подход, главный ответ на этот вопрос: stackoverflow.com/questions/1295697/ Он в основном обертывает свойство вокруг значения bool, допускающего значение NULL, и сериализует / десериализует его. Игнорируйте свойство bool из сериализации.   -  person lahsrah    schedule 30.07.2012
comment
Вы можете использовать public bool ShouldSerializecopy() {return copy.HasValue;}, как показано здесь: stackoverflow.com/questions/244953/ сериализовать-a-nullable-int   -  person Raphaël Althaus    schedule 30.07.2012


Ответы (1)


[XMLArray("Users")]
public class User
{
    [XmlIgnore]
    public bool? m_copy;

    [XmlAttribute("copy")]
    public string copy
    {
        get { return (m_copy.HasValue) ? m_copy.ToString() : null; }
        set { m_copy = !string.IsNullOrEmpty(value) ? bool.Parse(value) : default(bool?); }
    }
}

Я получил решение из ответа на сообщение, на которое ссылается sylon. Большое спасибо!

person theknut    schedule 30.07.2012