Как я могу десериализовать список абстрактного класса, используя Xmlserializer? - PullRequest
0 голосов
/ 23 января 2019

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

Как правильно это сделать?

...