[英]XML serialization - collection of multiple types
我想在子Submenu
放入两个不同的标签: Item
和Separator
,然后使用XmlSerializer解析XML文档。 当子Submenu
仅包含Item
序列时,我可以这样做。
示例XML文档:
<?xml version="1.0" encoding="utf-8" ?>
<Navigation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="...">
<Menu Name="Main">
<Item Caption="File">
<Submenu>
<Item Caption="New" Command="." />
<Item Caption="Open" Command="." />
<Separator />
<Item Caption="Exit" Command="." />
</Submenu>
</Item>
</Menu>
</Navigation>
和(不)有效的C#代码:
[Serializable]
[XmlRoot("Navigation", IsNullable = false)]
public class Navigation
{
[XmlElement("Menu")]
public List<Menu> MenuCollection { get; set; }
}
[Serializable]
[XmlRoot("Menu", IsNullable = false)]
public class Menu
{
[XmlAttribute("Name")]
public string Name { get; set; }
[XmlElement("Item")]
public List<Item> Items { get; set; }
}
[Serializable]
[XmlRoot("Item", IsNullable = false)]
public class Item
{
[XmlAttribute("Caption")]
public string Caption { get; set; }
[XmlAttribute("Command")]
public string Command { get; set; }
[XmlElement("Submenu", IsNullable = true)]
public Menu Submenu { get; set; }
}
Menu.Items
应包含项目和分隔符。 我该怎么做?
尽管从概念上讲菜单项和分隔符是两个不同的东西,但最容易将它们都视为菜单项。 将新属性添加到您的Menu
类:
[XmlAttribute]
public bool IsSeparator { get; set; }
这样, Menu.Items
仅需要包含Items
。 您的XML最终将包含诸如
<Item IsSeparator="true" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.