`

使用反射机制遍历对象中的属性名及属性值

    博客分类:
  • C#
阅读更多

首先描述一种情景,当给你一个VO类(这个类是映射到数据库的表上的),现在让你把这个VO对象(已包含有效数据)另存为成XML文件,一般的做法可能是:

 

rows[i].SetAttribute("Adddate", ret[i].Adddate);

 

 如果属性只有五六七八个还可以忍受手写的方式,如果多至十几乃至几十的情况下,手写已经超出了人的忍耐程度。下面给出一种解决方法,利用C#的反射机制自动生成这些XML节点(属性等)。

给出一个示例的VO类:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DataCenter.VO
{
    public class HousehireVO
    {
        private int _id;
        private string _area;
        private string _source;
        private string _sphone;
        private string _address;
        private int _lc;
        private string _hx;
        private string _zhuangxiu;
        private double _hireprice;
        private int _bnuan;
        private string _ptss;
        private string _sysm;
        private string _bphone;
        private string _linkman;
        private string _wtsm;
        private DateTime _adddate;
        private int _userid;
        private int _deptid;
        private string _deptName;
        private int _invaliddate;
        private string _gjxl;
        private int _status;
        private int _isAgreement;
        private double _mj;

        #region Constructors
        public HousehireVO()
        {
        }
        #endregion

        #region Properties
        //一些Setter/Getter
        #endregion
    }
}

 

上述这个类描述了一条房屋租赁信息。

 

不多废话,给出遍历属性的实现代码,如下:

 

 List<VO.HousehireVO> ret ;
           
            //创建xml文档对象
            XmlDocument doc = new XmlDocument();
            //xml头
            doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null)); //声明
            //根元素
            doc.AppendChild(doc.CreateElement("root")); //根节点

            XmlElement[] rows = new XmlElement[ret.Count];

            for (int i = 0; i < ret.Count; i++)
            {
                rows[i] = doc.CreateElement("Info");
                HousehireVO vo = ret[i];
                Type vType = vo.GetType();
                PropertyInfo[] vPropertyInfos = vType.GetProperties();
                foreach (PropertyInfo vPropertyInfo in vPropertyInfos)
                {
                    rows[i].SetAttribute(vPropertyInfo.Name, vPropertyInfo.GetValue(ret[0], null); 
                }
            }

 

 

分享到:
评论

相关推荐

    01:详解C#中的反射.pdf

    (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。 (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.5.5 遍历对象图  8.6 小结  8.7 思考题 第9章 通过Hibernate操纵对象(下)  9.1 与触发器协同工作  9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     8.5.5 遍历对象图  8.6 小结  8.7 思考题 第9章 通过Hibernate操纵对象(下)  9.1 与触发器协同工作  9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     8.5.5 遍历对象图  8.6 小结  8.7 思考题 第9章 通过Hibernate操纵对象(下)  9.1 与触发器协同工作  9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     8.5.5 遍历对象图  8.6 小结  8.7 思考题 第9章 通过Hibernate操纵对象(下)  9.1 与触发器协同工作  9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1...

    JavaScript王者归来part.1 总数2

     7.2.3 反射机制--枚举对象属性   7.3 对象的构造   7.3.1 构造函数--一个双精度浮点数封装类的例子   7.3.2 缺省构造和拷贝构造   7.3.3 对象常量   7.4 对象的销毁和存储单元的回收   7.5 JavaScript...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

    asp.net知识库

    XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET ...

    轻松学C#(图解版)

    8.2.4 对属性使用对象初始化器 150 8.3 索引器 151 8.3.1 索引器的声明 151 8.3.2 一维索引器的使用 152 8.3.3 重载索引器 153 8.3.4 比较属性和索引器 153 8.3.5 比较索引器和数组 154 8.4 小结 154 8.5 习题 154 ...

    JAVA面试题最全集

    描述反射机制的作用 62.如何读写一个文件? 63.在图形界面中,一个按钮如何处理鼠标点击事件? 64.在图形界面中,一个表格,如何实现编辑单元格时弹出下拉框? 65.如何加载图片? 66.什么是模态对话框? 67....

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    net学习笔记及其他代码应用

    6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? ...

    JAVA_API1.6文档(中文)

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    Tcl_TK编程权威指南pdf

    尽管它是个商用软件包,但你也可以在Internet上找到它(见第VII页),而且可以在自己的应用程序中自由使用这个软件包。Tcl解释器已经从Unix平台移植到了DOS、Windows、OS/2、NT以及Macintosh环境中,而TK工具包也从X ...

    Scala程序设计(第2版)

    22.1 在Scala代码中使用Java名称 430 22.2 Java泛型与Scala泛型 430 22.3 JavaBean的性质 432 22.4 AnyVal类型与Java原生类型 433 22.5 Java代码中的Scala名称 433 22.6 本章回顾与下一章提要 434 ...

    java面试题

    35. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 18 36. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?...

    JavaAPI1.6中文chm文档 part1

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

    Java面试宝典2020修订版V1.0.1.doc

    41、什么是java反射机制? 84 42、hashmap的底层实现 85 43、什么是java内存泄漏,怎么预防? 85 七、框架部分 85 1、谈谈你对Struts2的理解。 85 2、谈谈你对Hibernate的理解。 86 3、你对Spring的理解。 87 4、...

Global site tag (gtag.js) - Google Analytics