假设我们有一个基类“ 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)存储可序列化的数据,并将它们放在不同的类中。

10-06 01:24