以下方法实现了遍历一个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. smokeping插件使用及说明

    smokeping七大组件:general(普通设置) .alerts(警报设置).Datebase(数据库参数).presentation(网络自定义).slaves(从smokeping定义).t ...

  2. java中的 equals + hashCode

    [0]README 0.1)本文转自 core java volume 1, 旨在理清 equals + hashCode方法: [1]equals方法 1.1) Object中的 equals 方法 ...

  3. asm 与 cglib(整理的)

    参考博客地址 http://www.oseye.net/user/kevin/blog/304#top http://www.blogjava.net/vanadies10/archive/2011/ ...

  4. C#高级编程 第十五章 反射

    (二)自定义特性 使自定义特性非常强大的因素时使用反射,代码可以读取这些元数据,使用它们在运行期间作出决策. 1.编写自定义特性 定义一个FieldName特性: [AttributeUsage(At ...

  5. mysql分组查询n条记录

    当业务逻辑越来越复杂时,这个查询的需求会越来越多,今天写成笔记记录下来,防止再忘记 SELECT * FROM `notice` a where add_time > 1513008000 an ...

  6. Cannot create __weak reference in file using manual reference counting

    Xcode更新到7.3后会出现NSObject+MJProperty.h报Cannot create __weak reference in file using manual reference c ...

  7. 九度OJ 1048:判断三角形类型 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6794 解决:3361 题目描述: 给定三角形的三条边,a,b,c.判断该三角形类型. 输入: 测试数据有多组,每组输入三角形的三条边. 输 ...

  8. 百度小程序转换微信小程序

    Python脚本,一键转换Github地址:https://github.com/DWmelon/py-transfer-BdToWx 运行条件 具备Python环境,可在命令行中使用Python命令 ...

  9. (转)source insight 窗口嵌入

    昨天用了一下source insight ,都说很强大,也有感觉,但是这个强大的东西往往不是那么容易弄清楚的,或者一下子就好上手的,工具强大,功能复杂多样,一开始不知道怎么入手,以后慢慢来吧,学习是要 ...

  10. GstAppSink简介

    Description Appsink is a sink plugin that supports many different methods for making the application ...