根据字符串类名反射出类的属性(带源码)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 根据字符串类名反射出类的属性(带源码)

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

 2013/12/3 3:25:59  人在江湖博客  博客园  我要评论(0)
  • 摘要:1.1.应用场景:xml中配置一些重复的相同的属性,手工配置比较麻烦,需要一个程序自动配置。2.1.思路:2.1.1.编写实体类;编写实体类的方法有许多种,第一、可以自己写一个实体类;第二、可以使用代码生成器;第三、可以使用entityframeworkdatabasefirst;我先贴一下实体代码:usingSystem;usingSystem.Collections.Generic;publicpartialclassstudents{publicint?Id{get;set;
  • 标签:源码 反射 字符串

 

1.1. 应用场景:

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

2.1. 思路:

class="p0"> 

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();
        }

 

 

 源码下载

发表评论
用户名: 匿名