Использование XMLTextAttribute при наследовании класса - PullRequest
3 голосов
/ 15 февраля 2011

Я пытаюсь сериализовать объект 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";
}

Он сериализуется правильно, но в первом случае я теряю наследование, во втором случае значение находится в другом элементе, а не в тексте, а в последнем случае я теряю тип для строки.

Кто-нибудь знает, что мне не хватает?

1 Ответ

2 голосов
/ 16 февраля 2011

По словам Microsoft, это не ошибка, это так 'design' , но я не могу найти документацию об этом ограничении.В любом случае, я просто попробую любой из возможных обходных путей.

...