如何使用Xmlserializer反序列化抽象类的列表?

时间:2019-01-23 13:17:23

标签: c# deserialization xmlserializer

我正在尝试反序列化 RShortcut 对象的列表,该对象是一个抽象类。但是,XmlSerializer始终返回一个空列表。

这是我正在运行的代码:

String toolbarPath = HttpRuntime.AppDomainAppPath + Settings.Default.DEFAULT_TOOLBAR_PATH;
StreamReader reader = new StreamReader(toolbarPath);
XmlSerializer toolbarSerializer = new XmlSerializer(typeof(List<RShortcut>), new XmlRootAttribute("Shortcuts"));
List<RShortcuts> shortcuts = (List<RShortcut>)toolbarSerializer.Deserialize(reader);

这些是类的定义:

[Serializable]
[XmlRoot("Shortcut")]
[XmlType("Shortcut")]
[XmlInclude(typeof(RShortcutPopup))]
[XmlInclude(typeof(RShortcutTab))]
public abstract class RShortcut
{
    [XmlAttribute("path")]
    public String Path{ get; set; }
}

[Serializable]
[XmlRoot("Popup")]
[XmlType("Popup")]
public class RShortcutPopup : RShortcut
{
}

[Serializable]
[XmlRoot("Tab")]
[XmlType("Tab")]
public class RShortcutTab : RShortcut
{
}

这是一个xml示例:

<Shortcuts>
  <Tab path="foo.bar.com" />
  <Popup path="foo.bar.net"/>
</Shortcuts>

正确的做法是什么?

0 个答案:

没有答案