我正在尝试序列化元素文本中使用的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";
}

它可以正确地序列化,但是在第一种情况下,我丢失了继承,在第二种情况下,值在另一个元素中而不是在文本中,而在最后一个情况中,我丢失了字符串的类型。

有人知道我在想什么吗?

最佳答案

根据Microsoft的说法,这不是bug,而是'by design',但是我找不到有关该限制的文档。无论如何,我将尝试任何可能的解决方法。

07-26 04:57