假设我们有一个基类“ System.Windows.Controls”的派生类“ SerializableLabel”。
[XmlRoot("SerializableLabel")]
public class SerializableLabel : Label
{
public string foo = "bar";
}
我想序列化此类,但忽略父类中的所有属性。理想情况下,xml如下所示:
<SerializableLable>
<foo>bar</foo>
</SerializableLable>
如何最好地实现?
我的第一次尝试使用了典型的XmlSerializer方法:
XmlSerializer s = new XmlSerializer(typeof(SerializableLabel));
TextWriter w = new StreamWriter("test.xml");
s.Serialize(w, lbl);
w.Close();
但这会引发异常,因为序列化程序会尝试序列化作为接口(ICommand Command)的基类属性。
最佳答案
上述问题(包括JP指出的问题)的可能根源是您的类层次结构试图违反Liskov Substitution Principle。用更简单的术语来说,派生类尝试不执行基类已经执行的操作。换句话说,您正在尝试创建一个不能替代基本标签的派生标签。
这里最有效的补救方法可能是将SerializableLabel试图做的两件事去耦:(a)与UI相关的功能;(b)存储可序列化的数据,并将它们放在不同的类中。