.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 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...
随机推荐
- echarts改变颜色属性的demo
一:柱状图改变颜色 图片.png 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- Ubuntu 安装 SSH server 并配置 SSH 无密码登录
https://hinine.com/install-and-configure-ssh-server-on-ubuntu/ Ubuntu 安装 SSH server 并配置 SSH 无密码登录 发表 ...
- 一个里程碑,新网站实现全站https
本地验证node服务没问题后,上传到阿里云服务器上,发现无法访问.一开始以为是SSL证书有问题,去腾讯云SSL证书重新下载,还是不行.然后改node应用文件代码app.js,猜测是crt证书应该改成p ...
- 【35.39%】【hdu 3333】Turing Tree
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- 用 Expression Blend 创建酷炫的 Button
原文:用 Expression Blend 创建酷炫的 Button 原文:Creating "Cool" Buttons with Expression Blend Author ...
- WPF应用程序顶级标签一定是Window吗?
原文:WPF应用程序顶级标签一定是Window吗? WPF应用程序顶级标签一定是Window吗? 很多人误以为是.可是,答案却是否定的.我们不妨来测试一下. 首先使用顶级标签为Window,这是最普通 ...
- sql在单引号的声明标志着嵌套问题
在sql声明,我们将不可避免地使用嵌套单引号什么时候.但它肯定不是一个直接嵌套,java使用反斜杠做到这一点是不够的.在sql这是做一个单引号逃逸. 例如,下面的例子是展示一个示例存储过程的语句进行查 ...
- WPF 实现波浪浮动效果
原文:WPF 实现波浪浮动效果 目标:实现界面图标Load时,整体图标出现上下波浪浮动效果,如下图: 前台代码: <Windowxmlns="http://schemas.micros ...
- 经典数字图像处理(matlab 实现)
Ivan Selesnick(Software) Sparsity / Total variation / Denoising Software - Michael Elad's Personal P ...
- SharePoint创建内容类型
SharePoint创建内容类型 内容类型的用途是多种多样的.创建内容类型也非常简单. 1. 点击网站操作--网站设置. 2. 点击网站内容类型,点击创建. 3. 命名Beginning_ShareP ...