根据反射获取属性信息并创建DataTable

查看了一些方法之后,做了一些总结,此方法适用于传进的参数是List<T>类型,

但事先并不知道T的类型,T可以是自定义类型。

 1 public DataTable CreateDataTable(Object o)
 2         {
 3             DataTable dt = new DataTable();
 4             //DataColumn yearColumn = new DataColumn("Year", System.Type.GetType("System.String"));
 5             //DataColumn monthColumn = new DataColumn("Month", System.Type.GetType("System.String"));
 6             //dt.Columns.AddRange(new DataColumn[] { yearColumn, monthColumn});
 7             //foreach (DateModel date in dlist)
 8             //{
 9             //    DataRow newRow = dt.NewRow();
10             //    newRow["Year"] = date.year;
11             //    newRow["Month"] = date.month;
12             //    dt.Rows.Add(newRow);
13             //}
14             //Type testType = typeof(DateModel);
15
16             Type testType = o.GetType();
17             Type t = o.GetType().GetGenericArguments()[0];
18             //object genericList = CreateGeneric(typeof(List<>), o.GetType().GetGenericArguments()[0]);
19             //genericList.GetType().InvokeMember("Add", BindingFlags.Default | BindingFlags.InvokeMethod, null, genericList, new Object[] { o});
20             ////Type testType = typeof(CreateDataTableUtil);
21             //Assembly assembly = testType.Assembly;
22             //string name = assembly.FullName;//name = "WindowsFormsApplication6, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
23
24             //Type[] typeList = assembly.GetTypes(); // 获取类型
25             //                                       // 针对每个类型获取详细信息
26
27             PropertyInfo[] propertys = t.GetProperties();
28
29             foreach (PropertyInfo pro in propertys)
30             {
31                 DataColumn dc = new DataColumn();
32                 dc = dt.Columns.Add(pro.Name, System.Type.GetType(pro.PropertyType.FullName));
33             }
34             IEnumerable list = o as IEnumerable;
35             foreach (Object obj in list)
36             {
37                 DataRow newRow = dt.NewRow();
38                 for (int i = 0; i < propertys.Count(); i++)
39                 {
40                     newRow[dt.Columns[i]] = obj.GetType().GetProperty(dt.Columns[i].ToString()).GetValue(obj);
41                 }
42
43                 dt.Rows.Add(newRow);
44             }
45             return dt;
46         //}
47         //public static object CreateGeneric(Type generic, Type innerType, params object[] args)
48         //{
49         //    Type specificType = generic.MakeGenericType(new System.Type[] { innerType });
50         //    return Activator.CreateInstance(specificType, args);
51         }
52     }
时间: 2024-08-02 18:04:46

根据反射获取属性信息并创建DataTable的相关文章

c#反射机制学习和利用反射获取类型信息

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌.如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道 1..NET可执行应用程序结构 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构. 应用程序结构分为应用程序域—程序集—模块—类型—成员几

定义通用的可通过lambda表达式树来获取属性信息

我们一般获取某个类型或对象的属性信息均采用以下几种方法: 一.通过类型来获取属性信息 var p= typeof(People).GetProperty("Age");//获取指定属性 var ps = typeof(People).GetProperties();//获取类型的所有属性 二.通过实例来获取属性信息 People people = new People(); var pro = people.GetType().GetProperty("Age");

通过反射获取泛型信息

1 package com.coscon.reflectionTest; 2 3 import java.lang.reflect.Method; 4 import java.lang.reflect.ParameterizedType; 5 import java.lang.reflect.Type; 6 import java.util.List; 7 import java.util.Map; 8 9 //用过反射获取泛型信息 10 public class ReflectionForGe

反射获取属性DisplayName特性名字以及属性值

原文:反射获取属性DisplayName特性名字以及属性值 /// <summary> /// 反射获取所有DisplayName标记值 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="model">需要获取的实体</param> /// <returns></returns>

C# 反射获取属性值、名称、类型以及集合的属性值、类型名称

实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<ProductDetail> Detail { get; set; } public List<ProductComment> Comment { get; set; } } class ProductDetail { public string DtlId { get; set; } pub

通过反射获取字段信息

今天写一个参照,由于参照的数量太多,几乎每个单据都会有一个参照,因此我想抽象出一部分基本属性作为基类来继承, 我这么做了,但是数据没出来,看了源代码,发现了原因: 如截图所示,该代码只实现了当前类的属性的读取,但是没有读取父类的属性,提供方法如下来获取所以父类属性 很好理解,不断读取父类,直到遇到java.lang.object,我们就认为我们读取完了所有自己的父类的属性,当然,你是用了这个方法 注定只能是object的子类,其余的情况可以分开讨论,比如加一个接口来区分一下,然后分流读取即可

C#反射获取属性值和设置属性值

/// /// 获取类中的属性值 /// public string GetModelValue(string FieldName, object obj) { try { Type Ts = obj.GetType(); object o = Ts.GetProperty(FieldName).GetValue(obj, null); string Value = Convert.ToString(o); if (string.IsNullOrEmpty(Value)) return null

反射获取类结构信息

代码如下: 1 package com.sina.demo; 2 interface IMessageService{ 3 public void send(); 4 } 5 interface IChannel{ 6 public boolean connect(); 7 } 8 abstract class AbstractBase{} 9 class Mail extends AbstractBase implements IMessageService,IChannel{ 10 @Ove

使用反射获取属性、值

1 protected SqlParameter[] CreadeSqlParameters(object obj) 2 { 3 List<SqlParameter> list = new List<SqlParameter>(); 4 foreach (PropertyInfo item in obj.GetType().GetProperties()) 5 { 6 string name = item.Name; 7 object value = item.GetValue(o