Я пытаюсь сериализовать объект bool, используя текст элемента, и я сталкиваюсь с действительно странным поведением.
Я получаю сообщение об ошибке со следующим кодом:
[XmlRoot]
public class A
{
}
public class B : A
{
[XmlText]
public bool value = false;
}
и сериализация
using (StreamWriter sw = new StreamWriter("test.xml"))
{
B b = new B();
XmlSerializer serializer = new XmlSerializer(typeof(B));
serializer.Serialize(sw, b);
}
Подробности исключений:
«Произошла ошибка при отображении типа« ConsoleApplication2.B »
и внутреннее исключение говорит:
"Невозможно сериализовать объект типа 'ConsoleApplication2.B'. Рассмотрите возможность изменения типа члена XmlText 'ConsoleApplication2.B.value' с System.Boolean на строку или массив строк."
Изменение определения классов следующим образом:
public class B
{
[XmlText]
public bool value = false;
}
или как это:
[XmlRoot]
public class A
{
}
public class B : A
{
public bool value = false;
}
или даже так:
[XmlRoot]
public class A
{
}
public class B : A
{
[XmlText]
public string value = "false";
}
Он сериализуется правильно, но в первом случае я теряю наследование, во втором случае значение находится в другом элементе, а не в тексте, а в последнем случае я теряю тип для строки.
Кто-нибудь знает, что мне не хватает?