最近在对接一个银行的项目,大概就是类似一个钱包的功能,在请求返回的数据时,发现返回的数据标准的XML格式的支付串,格式如下

<kColl id="inputOrig" append="false">

  <field id="currency" value="RMB" append="false"/><field id="amount" value="0.01" append="false"/>

  <field id="masterId" value="2000311146" append="false"/>

  <field id="objectName" value="订单汇支付" append="false"/>

  <field id="orderId" value="20003111462016092317091311" append="false"/>

  <field id="paydate" value="20160923170913" append="false"/>

  <field id="remark" value="订单汇支付" append="false"/>

  <field id="validtime" value="120" append="false"/>

</kColl>

用常规的XML解析解析出来的数据是一个List,不能达到预期的目的,于是想到使用反射来解决这个问题。

代码如下:

/// <summary>
/// 支付结果解析
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parm"></param>
/// <param name="orig"></param>
/// <returns></returns>
public static T XMLParsing<T>(T parm, string orig)
{
  Type t = parm.GetType();
  XmlDocument xmlDocument = new XmlDocument();
  xmlDocument.LoadXml(orig);
  foreach (XmlElement book in xmlDocument.SelectNodes(@"kColl/field"))
  {
    foreach (PropertyInfo pi in t.GetProperties())
    {
      if (pi.Name.ToLower() == book.GetAttribute("id").ToLower())
      {
        pi.SetValue(parm, book.GetAttribute("value"), null);
      }
    }
  }
  return parm;
}

orig为原始XML字符串,格式如上,用反射来判断实体类中的参数名是否等于XML field节点中的id,如果相等,给这个实体类中的参数赋值。

第一次写博客,希望大家多多支持。

XML带多属性解析为一个实体类(利用反射)的更多相关文章

  1. 通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件

    通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件   文章目录 Ja ...

  2. XML和对象属性互转的基类

    本人做了一个XML和对象属性互转的基类,现在放上来有兴趣拿去看一下,用法很简单,声明一个BaseConversion的子类,该子类与你想转换的对象相对应,然后覆盖基类的两个虚方法,然后在里面写元素与对 ...

  3. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...

  4. OrmLite动态创建表,一个实体类创建多张表的的偏招

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...

  5. Activity设置全屏显示的两种方式及系统自带theme属性解析

    转载说明:原贴地址:http://blog.csdn.net/a_running_wolf/article/details/50480386 设置Activity隐藏标题栏.设置Activity全屏显 ...

  6. xml文档的解析并通过工具类实现java实体类的映射:XML工具-XmlUtil

    若有疑问,可以联系我本人微信:Y1141100952 声明:本文章为原稿,转载必须说明 本文章地址,否则一旦发现,必追究法律责任 1:本文章显示通过 XML工具-XmlUtil工具实现解析soap报文 ...

  7. org.hibernate.MappingException: entity class not found hbm可以解析,但是实体类不能解析

    在hbm.xml中给实体类加上包  com.we.lkl.studentVO

  8. mybatis向数据库插入数据 (传入的是一个实体类)

    /** * 插入用户信息 user为实体类 * @param user */ public int insert( User user); //实体类不用@param标注 //mybatis的xml文 ...

  9. SpringBoot 使用逆向工程 构建Mapper.xml Dao层(持久层) 实体类

    逆向工程 注: 有数据库表即可 第一步为创建数据库表 (可选)使用PowerDesigner设计数据库表,物理模型构建 添加pom.xml 逆向工程生成代码插件 <!--plugin 逆向工程生 ...

随机推荐

  1. 如何把家里的pc改装成linux服务器

    家里有一台pc笔记本闲置在家,最近想搭建一个ubuntu系统玩一下kvm. 这个方法能避免家里宽带每隔一段时间ip自动变换. 我用到了: 1.亚马逊的aws(ec2) 2.家里的路由器 3.aws里装 ...

  2. python笔记1-转义字符

    print(r'dd"e"f')print(r'dd'e'f')print(r"dd"e"f")print(r"dd'e'f&qu ...

  3. Maven之构件

    定义 构件:在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可成为构件.每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId, ...

  4. NSSearchPathForDirectoriesInDomains函数详解

    NSSearchPathForDirectoriesInDomains函数详解     #import "NSString+FilePath.h" @implementation ...

  5. 【Android】Ignoring InnerClasses attribute for an anonymous inner class

    这个问题是因为Android只能有6w个方法,解决方法,在defaultConfig中加入一句:multiDexEnabled true

  6. C和指针 第十六章 标准函数库

    字符串转换: long int strtol(char const *string, char **unused, int base); 将字符串转换为数值形式,遇到非法字符停止,如果stop不是NU ...

  7. Spring Boot with Spring Data JPA (1) - Concept

    What's Spring Data JPA? According to Pivotal, Spring Data JPA, part of the larger Spring Data family ...

  8. 我理解的Sitecore开发流程

    Sitecore是一个强大的支持快速开发CMS建站的平台,进入sitecore后台可以看到 它主要有3个元素: 1.Templates模板 Data template:类似于面向对象编程中的类或结构体 ...

  9. MySQL 权限与安全

    一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...

  10. C语言 完美字符串

    约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同. ...