以下方法实现了遍历一个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. 自定义 Android 钟表盘,这一篇就够了

    关于本文:本文原先在我的 CSDN 博客发布(由图片水印能发现),整理以往博客过程中,发现当时总结的很仔细,所以将其迁移到这里,希望对大家在自定义 View 方面,能有所帮助

  2. 简单的js表单验证框架

    /** * 通常在我们的HTML页面表单中有大量的数据验证工作, * 免不了要写很多验证表单的js代码,这是一项非常繁琐 * 枯燥的工作.很多程序员也会经常遗漏这项工作.当然 * 一些JavaEE框架 ...

  3. servletResponse 随机生成图片验证码

    /***********************************servlet页面************************************/ package response; ...

  4. Newtonsoft.Json读取txt文件中json数据并存到SQL service 数据库!

    using System; using System.Collections.Generic; using System.Text; using System.IO; using Newtonsoft ...

  5. git连接到github(SSH无密码登陆)

    [0]README 0.1)本文旨在尝试在linux环境下免密码连接到github,并进行push + pull projects in github by git commands. 0.1) 对s ...

  6. Linux - 命令行 管道(Pipelines) 具体解释

    命令行 管道(Pipelines) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24249529 管道操作符" ...

  7. python 基础 2.8 python练习题

    python 练习题:   #/usr/bin/python #coding=utf-8 #@Time   :2017/10/26 9:38 #@Auther :liuzhenchuan #@File ...

  8. Socket的错误码和描述

    //下面是Socket Error的错误码和描述: Socket error 0 - Directly send error  Socket error 10004 - Interrupted fun ...

  9. JavaScript 原型解析

    1.什么是对象?     javascript中除了null和undefined之外都是Object的实例. 在Javascript中, 每定义一个函数, 将伴生一个原型对象. 原型就是用来为同一类对 ...

  10. vue 向后台提交数据

    新建template 表单 <template> <div class="add-group content"> <table class=" ...