Я пытаюсь десериализовать список 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>
Как правильно это сделать?