根据字符串类名反射出类的属性(带源码)

 

1.1. 应用场景:

 xml中配置一些重复的相同的属性,手工配置比较麻烦,需要一个程序自动配置。

2.1. 思路:

 

2.1.1. 编写实体类;

编写实体类的方法有许多种,第一、可以自己写一个实体类;第二、可以使用代码生成器;第三、可以使用entity framework database first

我先贴一下实体代码:

 

 using System;
    using System.Collections.Generic;

    public partial class students
    {
        public int? Id { get; set; }
        public string Name { get; set; }
        public int Sex { get; set; }
        public DateTime CreateDate { get; set; } 
        public Product product { get; set; }
    }

 

针对以上的实体类,我作一些说明:

以上实体类主要是几个属性,属性名类型不一样,有int类型,有string类型,也有datetime和对象类型,其中我将它们分为三种:string、可空类型、原生类型(基本数据类型)。

为啥要分这几种类型,下面会讲到,这里先略过。

2.1.2. 编写方法,根据类名反射出来类的属性;

方法主要是写在一个按钮事件里面,通过点击一下按钮,然后将编写反射出来的类的属性拼接起来,显示在一个文本框中。看代码:

 

private void btnCreateXML_Click(object sender, EventArgs e)
        {
            //载入实体类所在的dll
            Assembly asmb = Assembly.LoadFrom("DataModel.dll");
            //根据命名空间下的类名,获得类对象
            Type typename = asmb.GetType("DataModel." + txtTableName.Text);
            StringBuilder str = new StringBuilder();
            //根据类型对象,创建实例,再获得它的属性
            foreach (PropertyInfo info in Activator.CreateInstance(typename).GetType().GetProperties())
            {
                Type type = Type.GetType(info.PropertyType.FullName);
                if (type != null)
                {

                    //属性有时候会有多种,我们需要排除非原生类型的
                    if (type.IsPrimitive || type.Name.Equals("String") || type.Name.Equals("Nullable`1"))
                    {
                        str.Append("<property ");
                        str.Append(" name="" + info.Name + """);
                        str.Append(" column="" + info.Name + """);
                        if (type.Name.Equals("Nullable`1"))
                        {
                            int start = type.FullName.IndexOf("[[") + 2;
                            int end = type.FullName.IndexOf(",");
                            str.Append(" type="" + type.FullName.Substring(start, end - start) + """);
                        }
                        else
                        {
                            str.Append(" type="" + info.PropertyType.FullName + """);
                        }
                        str.Append("/>");
                    }
                }
            }
            txtResult.Text = str.ToString();
        }

 源码下载

原文地址:https://www.cnblogs.com/renzaijianghu/p/3454881.html