继承类时使用XMLTextAttribute

时间:2011-02-15 10:20:26

标签: .net xml-serialization

我正在尝试使用元素文本序列化一个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'类型的对象。请考虑将System.Boolean中的XmlText成员'ConsoleApplication2.B.value'的类型更改为字符串或字符串数​​组。”

像这样更改类定义:

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 个答案:

答案 0 :(得分:2)

根据微软的说法,这不是一个错误,就是'by design',但我找不到有关该限制的文档。无论如何,我将尝试任何可能的解决方法。