本文实例讲述了C#使用XML序列化操作菜单的方法。分享给大家供大家参考。具体分析如下:
之前的一篇文章《C#递归读取XML菜单数据的方法》没使用XML序列化来操作菜单,而且发现那还有一个问题,就是在XML菜单的某个菜单节点前加上一些注释代码的就不能读取,现在使用XML序列化后可以很方便的读取,故在此写一写。
XML菜单的节点代码如下:
复制代码 代码如下:
这里面有一个节点:Applications(应用程序节点),里面可以放多个Application,而每个Application节点里面只包含一个Modules(模块节点),Modules有多个Module,每个Module又只有一个Menus(菜单节点),而Menus里有多个Menu。而每个节点都有两个公共的属性:ID和Text。
故这里写一个公共的属性类:baseAttribute,前面记得加上序列化标识Serializable,代码如下:
复制代码 代码如下:
[Serializable]
public class baseAttribute
{
[XmlAttribute(AttributeName = "ID")]
public string ID { get; set; }
[XmlAttribute(AttributeName = "Text")]
public string Text { get; set; }
}
每个节点都有两个类,一个是列表,一个是实体,实体类需继承公共的类,如下:
复制代码 代码如下:
[Serializable]
public class ApplicationList
{
public ApplicationList()
{
this.Applications = new List();
}
[XmlElement(ElementName = "Application")]
public List Applications { get; set; }
}
[Serializable]
public class Application : baseAttribute
{
public Application()
{
this.Modules = new ModuleList();
}
[XmlElement(ElementName = "Modules")]
public ModuleList Modules { get; set; }
[XmlAttribute(AttributeName = "URL")]
public string URL { get; set; }
}
[Serializable]
public class ModuleList
{
public ModuleList()
{
this.modules = new List();
}
[XmlElement(ElementName = "Module")]
public List modules { get; set; }
}
[Serializable]
public class Module : baseAttribute
{
public Module()
{
this.Display = "True";
this.Menus = new MenuList();
}
[XmlElement(ElementName = "Menus")]
public MenuList Menus { get; set; }
[XmlAttribute(AttributeName = "Display")]
public string Display { get; set; }
[XmlAttribute(AttributeName = "URL")]
public string URL { get; set; }
}
[Serializable]
public class MenuList
{
public MenuList()
{
this.Menus = new List