以下方法实现了遍历一个class中所有的字段, 并且递归遍历sub class。
 private StringBuilder _properties = new StringBuilder();
        public MainView()
        {
            TraversalProperties(typeof(StudyInfoModel));
            File.WriteAllText("Properties.txt", _properties.ToString());
        }
private void TraversalProperties(Type classTemplate)
        {
            if (null == classTemplate)
            {
                return;
            }
           
            foreach (PropertyInfo pi in
                classTemplate.GetProperties(BindingFlags.Public | BindingFlags.Instance| BindingFlags.DeclaredOnly))
            {
                PropertyInfo needUpdateValue = classTemplate.GetProperty(pi.Name);
                if (needUpdateValue.PropertyType.Equals(classTemplate))
                {
                    return;
                }
                if (needUpdateValue.PropertyType.IsArray
                    || (needUpdateValue.PropertyType.IsClass
                        && !needUpdateValue.PropertyType.IsGenericType
                        && !needUpdateValue.PropertyType.Equals(typeof(String))
                        && !needUpdateValue.PropertyType.IsValueType
                        )
                    )
                {
                    TraversalProperties(needUpdateValue.PropertyType);
                }
                else if (needUpdateValue.PropertyType.IsGenericType
                    &&  needUpdateValue.PropertyType.GetGenericTypeDefinition()== typeof(ObservableCollection<>))
                {
                    TraversalProperties(needUpdateValue.PropertyType.GetGenericArguments()[0]);
                }
                else
                {
                    if (classTemplate.Name.Contains("StudyInfoModel"))
                    {
                        _properties.AppendFormat("\"{0}\", ", needUpdateValue.Name);
                    }
                    else
                    {
                        _properties.AppendFormat("\"{0}_{1}\", ", classTemplate.Name.Replace("InfoModel", ""), needUpdateValue.Name);
                    }
                  
                }
            }
           
        }

利用反射拿到并递归C#类中的各个字段名字及类型的更多相关文章

  1. 利用反射将IDataReader读取到实体类中效率低下的解决办法

    最开始使用反射一个类型的各个属性,对气进行赋值的代码如下: public static List<T> ToList<T>(IDataReader reader) { //实例 ...

  2. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  3. 使用反射机制实现jQuery调用ashx类中的指定方法

    使用反射机制实现jQuery调用ashx类中的指定方法   近期用asp.net做个小网站,但又不喜欢使用asp.net的服务器端控件,经过一番思量后确定前端采用原始的html.后台采用Linq to ...

  4. spring 项目中在类中注入静态字段

    有时spring 项目中需要将配置文件的属性注入到类的静态字段中 例如:文件上传 //文件上传指定上传位置 //resource-dev.properties 有如下参数 #upload UPLOAD ...

  5. C# 类中的静态字段始终继承自基类

    我们试想一下现在有一个类Parent,它有一个static的int类型字段number,然后如果类Parent有三个子类Child01.Child02和Child03,那么改变Parent.numbe ...

  6. Fsharp 类中的空字段

    fsharp设计之初就尽可能的避免使用null.在我的编程经验中null真是个错误之源,垃圾代码之源,95%的系统奔溃之源.其实在设计之初就应该考虑你的系统需要null表现什么?是未初始化的状态,还是 ...

  7. c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值

    转自 http://hi.baidu.com/wjinbd/item/c54d43d998beb33be3108fdd 1 创建自己要用的类 class stu { string _name; int ...

  8. 使用springboot mybatis 查询时实体类中的驼峰字段值为null

    看到返回结果以后主要分析了一下情况: 实体类的get.set方法确实 mapper.xml文件中的resultMap.resultType等原因导致 数据库中数据存在问题 经过检查与验证发现以上都不存 ...

  9. @JsonView注解指定返回的model类中显示的字段

    1.User类 package com.imooc.model; import com.fasterxml.jackson.annotation.JsonView; /** * @author oy ...

随机推荐

  1. hadoop权威指南学习

    通常情况下,处理少量的大型文件更容易.更有效,为什么呢? map阶段中的键如果不需要可以忽略掉? MapReduce过程也可以用于本地文件的处理,但是如果是要使用到集群的话还需要HDFS. Data ...

  2. jQuery+bootstrap实现美化警告/确认/提示对话框插件

    http://www.html580.com/12067/demo http://craftpip.github.io/jquery-confirm/

  3. GS与数据库打交道

    GS与数据库打交道 link_stat stat = (link_stat)rPkt.size; if (stat == link_stat::link_connected) { GameChanne ...

  4. 两个DataGridEHToExcel

    procedure TForm1.N1Click(Sender: TObject); var    GridtoExcel: TDBGridEhToExcel; begin    try    Gri ...

  5. mysql的分库分表

    1 什么是分库分表 这里讨论的情况是一台机器上对应一个数据库. 分库的对象是表,分表的对象是行.分库是说把属于同一个模块的相关性很高的表放在同一个数据库中.分表是说把同一个表的的行分成多个子表,把各个 ...

  6. Future 异步回调 大起底之 Java Future 与 Guava Future

    目录 写在前面 1. Future模式异步回调大起底 1.1. 从泡茶的案例说起 1.2. 何为异步回调 1.2.1. 同步.异步.阻塞.非阻塞 1.2.2. 阻塞模式的泡茶案例图解 1.2.3. 回 ...

  7. Linux入门基础(一)——ls、mkdir命令

  8. ABAP HTTP POST

    1.HTTP DATA: lo_http_client TYPE REF TO if_http_client, lv_service TYPE string, lv_result TYPE strin ...

  9. update module (更新模块)

    [转自http://blog.csdn.net/zhongguomao/article/details/6712568] function module:更新程序必须用一个特殊的FM(update m ...

  10. Chart.js 动态图表的使用

    一.相关资料 1. 简介 Chart.js 是一个基于 HTML5 的简单的面向对象的图表库,支持包括 IE7/8 和所有现代浏览器.支持六种图标:曲线图(Linecharts).柱状图(Barcha ...