我正在尝试使用元素文本序列化一个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";
}
它正确序列化,但在第一种情况下我失去了继承,在第二种情况下,值在另一个元素而不是在文本中,在最后一个中我丢失了字符串的类型。
有谁知道我错过了什么?