XML 反序列化成对象,绑定到CheckBoxList控件
1、前台
<div class="control-group">
<label class="control-label">
导航名称:</label>
<div class="controls">
<asp:CheckBoxList ID="CboxList" runat="server">
</asp:CheckBoxList>
<span class="help-inline"></span>
</div>
</div>
2、XML文件 MenuConfig.xml
<?xml version="1.0" encoding="utf-8" ?>
<MenuConfig>
<MenuGroups>
<MenuGroup name="管理首页" url="main.aspx" icon="icon-home" info="欢迎登录OAM管理系统!">
</MenuGroup>
<MenuGroup name="系统管理" icon="icon-cog">
<MenuArray>
<Menu name="用户管理" url="/Account/User/Index" info="添加修改删除用户" permission="Manage_User" />
<Menu name="权限管理" url="/Account/Role/Index" info="添加修改删除角色" permission="Manage_Role" />
<Menu name="日志管理" url="/Account/Role/Index" info="添加修改删除角色" permission="Manage_Log" />
<Menu name="修改密码" url="/Account/Role/Index" info="添加修改删除角色" permission="Modify_Pwd" />
</MenuArray>
</MenuGroup> <MenuGroup name="企业信息管理" icon="icon-leaf">
<MenuArray>
<Menu name="企业信息列表" url="/Cms/Article/Index" info="添加修改删除文章" permission="Manage_Enterp" />
<Menu name="新增企业(我司)" url="/Cms/Channel/Index" info="添加修改删除文章频道" permission="AddMy_Enterp" />
<Menu name="注册企业(网络)" url="/Cms/Channel/Index" info="添加修改删除文章频道" permission="AddInter_Enterp" />
</MenuArray>
</MenuGroup> <MenuGroup name="企业服务管理" icon="icon-sitemap">
<MenuArray>
<Menu name="客户反馈" url="/OA/Staff/Index" info="添加修改删除员工信息" permission="Feedback_Manage" />
<Menu name="客户投诉" url="/OA/Branch/Index" info="添加修改删除部门信息" permission="Complaints_Manage" />
</MenuArray>
</MenuGroup> <MenuGroup name="企业信息维护管理" icon="icon-phone-sign">
<MenuArray>
<Menu name="来访来电" url="/Crm/VisitRecord/Index" info="添加修改删除来访来电" permission="CrmManage_VisitRecord" />
<Menu name="客户管理" url="/Crm/Customer/Index" info="添加修改删除客户" permission="CrmManage_Customer" />
<Menu name="项目管理" url="/Crm/Project/Index" info="添加修改删除项目" permission="CrmManage_Project" />
<Menu name="业绩统计" url="/Crm/Analysis/Index" info="查看业绩统计" permission="CrmManage_Analysis" />
<Menu name="来电统计" url="/Crm/Analysis/VisitStatistics" info="查看来电统计" permission="CrmManage_Analysis" />
</MenuArray>
</MenuGroup>
<MenuGroup name="消息中心" icon="icon-sitemap">
<MenuArray>
<Menu name="客户反馈" url="/OA/Staff/Index" info="添加修改删除员工信息" permission="OAManage_Staff" />
<Menu name="客户投资" url="/OA/Branch/Index" info="添加修改删除部门信息" permission="OAManage_Branch" />
</MenuArray>
</MenuGroup>
</MenuGroups>
</MenuConfig>
3、Model层 MenuConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization; namespace OAM.Model
{
[Serializable]
public class MenuConfig
{
public MenuConfig()
{
} public MenuGroup[] MenuGroups { get; set; }
} [Serializable]
[XmlRoot("MenuGroups")]
public class MenuGroup
{
[XmlArray("MenuArray")]
[XmlArrayItem("Menu")]
public List<Menu> MenuArray { get; set; }
[XmlAttribute("id")]
public string Id { get; set; } [XmlAttribute("name")]
public string Name { get; set; } [XmlAttribute("url")]
public string Url { get; set; } [XmlAttribute("icon")]
public string Icon { get; set; } [XmlAttribute("permission")]
public string Permission { get; set; } [XmlAttribute("info")]
public string Info { get; set; }
} [Serializable]
[XmlRoot("Menu")]
public class Menu
{
[XmlAttribute("id")]
public string Id { get; set; } [XmlAttribute("name")]
public string Name { get; set; } [XmlAttribute("url")]
public string Url { get; set; } [XmlAttribute("info")]
public string Info { get; set; } [XmlAttribute("permission")]
public string Permission { get; set; }
}
}
4、将xml文件内容反序列化成对象
#region XML导航反序列化 绑定CheckBoxList
//将xml反序列化为MenuConfig数组对象
private void XmlMenuToModel()
{
OAM.Model.MenuConfig MenuListArr = XmlDeseriFromfile<OAM.Model.MenuConfig>(Request.MapPath("Config/MenuConfig.xml"), Encoding.UTF8);
if (MenuListArr.MenuGroups.Length > 0)
{
for (int i = 0; i < MenuListArr.MenuGroups.Length; i++)
{
if (MenuListArr.MenuGroups[i].MenuArray.Count > 0)
{
for (int j = 0; j < MenuListArr.MenuGroups[i].MenuArray.Count; j++)
{
ListItem item = new ListItem(MenuListArr.MenuGroups[i].MenuArray[j].Name, MenuListArr.MenuGroups[i].MenuArray[j].Permission);
CboxList.Items.Add(item);
}
}
}
}
}
/// <summary>
/// 从XML字符串中反序列化对象
/// </summary>
/// <typeparam name="T">结果对象类型</typeparam>
/// <param name="s">包含对象的XML字符串</param>
/// <param name="encoding">编码方式</param>
/// <returns>反序列化得到的对象</returns>
public T Deser<T>(string xmlstr, Encoding encoding)
{
XmlSerializer myser = new XmlSerializer(typeof(T));
MemoryStream ms = new MemoryStream(encoding.GetBytes(xmlstr));
StreamReader sr = new StreamReader(ms, encoding);
return (T)myser.Deserialize(sr);
}
/// <summary>
/// 读入一个文件,并按XML的方式反序列化对象。
/// </summary>
/// <typeparam name="T">结果对象类型</typeparam>
/// <param name="path">文件路径</param>
/// <param name="encoding">编码方式</param>
/// <returns>反序列化得到的对象</returns>
public T XmlDeseriFromfile<T>(string path, Encoding encoding)
{
string xml = File.ReadAllText(path, encoding);
return Deser<T>(xml, encoding);
}
#endregion
搞了3小时才弄出这么点来代码,大家多支持一下。有什么问题留言,请教大神留下好的足迹。
XML 反序列化成对象,绑定到CheckBoxList控件的更多相关文章
- ObjC 巧用反射和KVC实现JSON快速反序列化成对象
1.简单的KVC介绍 KVC是一种间接访问对象属性的机制,不直接调用getter 和 setter方法,而使用valueForKey 来替代getter 方法,setValue:forKey来代替se ...
- XML序列化成对象
这个是和ALM上传测试结果结合使用的//把xml序列化成对象以及把对象序列化成xml using System; using System.Data; using System.Configurati ...
- ajax提交后台自动反序列化成对象
下面是ajax提交的方法,主要用到了$form.serializeArray()将表单序列化成json对象,然后用each处理一下,代码如下: var $form = $('<form>& ...
- JSON字符串反序列化成对象_部分属性值反序列化失败
简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...
- EXTJS4.2 控件之Grid 根据数据源某列数据不同绑定不同的控件setEditor
Grid 根据数据源某列数据不同绑定不同的控件,例如:文本框和下拉框 主要代码写在grid的 plugins: [rowEditing],下面这是定义的rowEditing对象,这里面的要定义成 E ...
- CheckBoxList控件
主要介绍:自定义数据.绑定数据库数据.全选,取消全选. 这种方法是绑定已经给定(自定义)的字段(这种方法是绑定给定的值,就是在编写控件时给Text赋的值): 前台代码: <asp:CheckBo ...
- Winform开发中如何将数据库字段绑定到ComboBox控件
最近开始自己动手写一个财务分析软件,由于自己也是刚学.Net不久,所以自己写的的时候遇到了很多问题,希望通过博客把一些印象深刻的问题记录下来. Winform开发中如何将数据库字段绑定到ComboBo ...
- 如何在双向绑定的Image控件上绘制自定义标记(wpf)
我们的需求是什么? 答:需要在图片上增加一些自定义标记,例如:2个图片对比时,对相同区域进行高亮. 先上效果图: 设计思路 1.概述 1.通过TargeUpdated事件,重新绘制图片进行替换. 2. ...
- winform快速开发平台 -> 快速绑定ComboBox数据控件
通常我们在处理编辑窗体时.往往会遇到数据绑定.例如combobox控件绑定数据字典可能是我们经常用到的.然而在我的winform快速开发平台中我是如何处理这个频繁的操作呢? 首先,我们要绑定combo ...
随机推荐
- JS通用弹窗,确定,取消可以回调方法。
<html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/j ...
- day 28 黏包及黏包解决方案
1.缓冲区 每个socket被创建以后,都会分配两个缓冲区,输入缓冲区和输出缓冲区,默认大小都是8k,可以通过getsocket()获取,暂时存放传输数据,防止程序在发送的时候卡阻,提高代码运行效率. ...
- python+selenium webdriver.firefox()方式配置浏览器设置
webdriver.firefox() 爬虫需求: (其实是输入参数可获取.zip/pdf 文件,然后点击下载) ——但是firefox浏览器有Bug,点击下载之后会有弹出窗口,需要你点击确定,这怎 ...
- MFC非模态添加进程控件方法二(自定义消息方法)
以下内容有大部分转载自CSDN,经过自己整理完成. 该文主要的方法为在非模态对话框中自定义一组消息函数,然后在主窗口中开辟一个线程通过线程把消息传递给子窗口进行更新. 在子窗口类中定义消息如下: /* ...
- STM32JTAG口用作普通IO的配置
使用Jlink向STM32烧录程序时,需要使用6个芯片的引脚(以STM32F103C8T6为例),分别是PB4/JNTRST.PB3/JTDO.PA13/JTMS.PA14/JTCK.PA15/JTD ...
- pyhton新手学习之增删改查
一 .列表的定义 1.列表的定义 names = [ "xiajiqni", "test", "wangwu","oldb ...
- 破解Wifi
牛刀小试:Wifi破解的原理. 准备工具: 1:Kali Linux系统 2:一块好用的无线网卡 (推荐免驱版,网上也有推荐,可以去百度上google一下) 3:WPA字典(用来爆破抓获的握手包) ...
- 使用gogs和glide来轻松拉取golang第三方库
golang的第三方代码拉取一直是让人头疼的问题,在github托管的代码还好,托管在其他网站上的代码总会由于大家都懂的原因,无法访问.纵使是github,在拉取文件数量较多的库时,也是比较慢的. 有 ...
- 20145234黄斐《Java程序设计》第八周学习总结
教材学习内容总结 第十五章部分 - 通用API 通用API 日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 日志API Logger: 注意无法使用构造方法生成Logger对象 ...
- 【BZOJ4818】序列计数(动态规划,生成函数)
[BZOJ4818]序列计数(生成函数) 题面 BZOJ 题解 显然是求一个多项式的若干次方,并且是循环卷积 或者说他是一个\(dp\)也没有问题 发现项数很少,直接暴力乘就行了(\(FFT\)可能还 ...