.NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary>
/// 解析xml字符串 转换为实体类列表数据
/// </summary>
/// <param name="xmlStr">xml字符串</param>
/// <returns></returns>
/// xml字符串格式如下:(Item的节点客户有多对,每对代表一条数据)
/// <?xml version="1.0" encoding="utf-8" ?><BOSS><Item>
/// <UserId>用户编号</UserId>
/// <Type>用户类型</Type>
/// <Group>用户群</Group>
/// <State>用户状态</State>
/// <SIM>SIM卡号</SIM>
/// <STB>机顶盒号</STB>
/// <Memo>备注</Memo>
/// <Crtime>创建日期</Crtime>
/// <CustomerId>客户编号</CustomerId>
/// <CustomerName>客户名称</CustomerName>
/// <Address>用户地址</Address>
/// <Phone>电话</Phone>
/// <Mobile>手机</Mobile>
/// </Item><Code></Code><Msg></Msg></BOSS>
public List<UserInfo> GetUserList(string xmlStr)
{
System.Type t = typeof(UserInfo);
object obj = Activator.CreateInstance(t, null);//创建指定类型实例
PropertyInfo[] fields = obj.GetType().GetProperties();//获取指定对象的所有公共属性 List<UserInfo> ulist = new List<UserInfo>();
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlStr);//加载xml
XmlNodeList xlist = xml.GetElementsByTagName("Item");//获取Item节点列表
foreach (XmlNode xn in xlist)//遍历Item节点下的子节点
{ object u = Activator.CreateInstance(t, null);//创建指定类型实例 foreach (PropertyInfo p in fields)
{
for (int i = ; i < xn.ChildNodes.Count; )
{
if (xn.ChildNodes[i].Name == p.Name)
{
p.SetValue(u, xn.ChildNodes[i].InnerText, null);//给创建的实例属性赋值
}
i++;
}
}
ulist.Add((UserInfo)u);
}
return ulist;
}
或者将该方法写为一个通用的方法进行调用
/// <summary>
/// 获取一个实体类的object数据列表
/// </summary>
/// <param name="xmlStr">指定格式的xml字符串</param>
/// <param name="t">实体类的发射类对象</param>
/// <returns>实体类的object数据类别</returns>
/// 不可直接将数据类别转换为实体类的真正类型数据列表,转换时,需遍历没有object逐个转换为实体类型,然后附加到List
public List<object> GetObjectList(string xmlStr, Type t)
{
List<object> olist = new List<object>();
object obj = Activator.CreateInstance(t, null);//创建指定类型实例
PropertyInfo[] fields = obj.GetType().GetProperties();//获取指定对象的所有公共属性 XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlStr);//加载xml
XmlNodeList xlist = xml.GetElementsByTagName("Item");//获取Item节点列表
foreach (XmlNode xn in xlist)//遍历Item节点下的子节点
{ object u = Activator.CreateInstance(t, null);//创建指定类型实例 foreach (PropertyInfo p in fields)
{
for (int i = ; i < xn.ChildNodes.Count; )
{
if (xn.ChildNodes[i].Name == p.Name)
{
p.SetValue(u, xn.ChildNodes[i].InnerText, null);//给创建的实例属性赋值
}
i++;
}
}
olist.Add(u);
}
return olist;
}
string xmlStr="指定格式的xml字符串";
System.Type t=typeof(实体类);
List<object> olist=GetObjectList(xmlStr,t);
List<实体类> list=new List<实体类>
然而此处存在一个问题,就是获取的只是object类的数据列表,并且List<object> 是无法转换为 List<实体类> 的,这时候我们可以通过遍历的形式进行转换
foreach(object o in olist)
{
list.Add((实体类)o);
}
.NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表的更多相关文章
- c# 利用反射动态给实体类对象赋值
转:http://blog.sina.com.cn/s/blog_659a572b0100xp5s.html 例子如下 using System; using System.Collections.G ...
- java解析xml字符串为实体(dom4j解析)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- tinyXml直接解析XML字符串
一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...
- 解析xml字符串时报“前言中不允许有内容”错误。
一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- java解析xml字符串(用dom4j)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- C++解析XML字符串
项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供).markup.TinyXml. 开始花了点时间使用msxml3,虽 ...
- Android利用反射机制为实体类属性赋值
在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面 ...
- Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)
上一篇文章我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...
随机推荐
- 【codeforces 768B】Code For 1
[题目链接]:http://codeforces.com/contest/768/problem/B [题意] 一开始给你一个数字n; 让你用这个数字n根据一定的规则生成序列; (如果新生成的序列里面 ...
- erlang 符号相关基本语法
http://blog.csdn.net/anghlq/article/details/6803332 ErLang语法约定: 大写字母开头的名字(比如Address),表示一个变量,包括参数.局部变 ...
- 学习鸟哥的Linux私房菜笔记(3)——基础使用
一.设备文件 设备在Linux中以特殊文件的形式存在 块(block)设备文件 字符(character)设备文件 设备文件所在位置 查看设备类型 二.虚拟控制台及用户身份切换 在系统中有12个虚拟控 ...
- Tower与DevCloud对比分析报告
1. 产品介绍 Tower是彩程设计公司出品的远程办公和团队协作工具,为小企业和小团队提供简单.靠谱的在线协作服务. DevCloud是集华为研发实践.前沿研发理念.先进研发工具为一体的研发云平台.D ...
- Python 第三方库的安装
1. pip 进入命令行,使用 pip install pip install numpy 2. 含有 setup.py 文件的第三方库 切换到 setup.py 所在的目录: python setu ...
- 至Linux-2.6.32编译内核ipset-6.23坎坷的经历
新的版本号ipset 上周,一名医生在儿童医院等待一段差距叫做数量.接受NetfilterPush信息的邮件列表,列表ipset最新6.23版本号的新功能,非常喜欢我现在需要的是,特别是timeout ...
- 深入了解Java虚拟机
一.垃圾收集 Java虚拟机堆不停的运转java由程序创建的所有对象.当一个对象不再被引用,它使用堆空间能够被回收,以便兴许的新对象所使用. 垃圾收集器必须能够断定哪些对象是不再被引用的,而且能够把它 ...
- JSON格式的服务接口
电商接口 京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例 ps:商品ID这么获取:http://item.jd ...
- JS 禁止IE用右键
<!--组合键: -->IE的键盘监听最多只能作用于document上(window我试过不行)如果内嵌了iframe并且你的焦点在iframe上,那么按键无效 这里我用CTRL+Q写的例 ...
- Blend_ControlTemplate(Z)
原文:Blend_ControlTemplate(Z) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010265681/article/deta ...