我正在尝试序列化元素文本中使用的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',但是我找不到有关该限制的文档。无论如何,我将尝试任何可能的解决方法。