我可以在DataColumn中存储可序列化的数组数据吗?

时间:2009-07-20 13:31:22

标签: c# arrays reflection datacolumn

我正在尝试自动将对象的属性转换为DataTable(对象是数组,并且具有从具有值类型的特殊类实例化的属性)。

代码:

static public DataTable f_GetDataTableFromClassObject(object _objInstance)
{
    // geri dönecek datatable
    DataTable dataTable = new DataTable();

    // nesnenin propertyleri içinde dolanalım ve datatable içine kolon olarak ekleyelim.
    foreach (var p in f_GetProperties(_objInstance))
    {
        if (p.PropertyType.IsArray)
        {
            if (p.PropertyType.BaseType.Attributes.ToString().IndexOf("Serializable")>-1)
            {
                // Now i want to store to DataColumn this properties which is instantiated DifferentClass[] and Serializable                 
            }
        }
        else
        {
            dataTable.Columns.Add(new DataColumn(p.Name, p.PropertyType));                    
        }
    }

    // ve tablomuz.
    return dataTable;
}

如何在DataColumn中存储此数组?

1 个答案:

答案 0 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        Person cenk = new Person() { adi = "Cenk", yasi = 18 };

        List<Person> lst = new List<Person>()
                               {
                                   cenk,
                                   new Person() {adi = "Cem", yasi = 17, harfler = new[] {"a","b","c"}},
                                   new Person() {adi = "Canan", yasi = 16, harfler = new[] {"a","b","c"}}
                               };
        DataTable dataTable = new DataTable();

        PropertyInfo[] pinfo = props();
        //var s = pinfo.Select(p => dataTable.Columns.Add(new DataColumn(p.Name, (p.PropertyType.FullName).GetType())));



        foreach (var p in pinfo)
        {
            dataTable.Columns.Add(new DataColumn(p.Name, p.PropertyType));
        }

        foreach (Person person in lst)
        {
            DataRow dr = dataTable.NewRow();
            foreach (PropertyInfo info in person.GetType().GetProperties())
            {
                object oo = person.GetType().GetProperty(info.Name).GetValue(person, null);
                dr[info.Name] = oo;
            }
            dataTable.Rows.Add(dr);
        }

    }

    static public PropertyInfo[] props()
    {
        return (new Person()).GetType().GetProperties();
    }
}

public class Person
{
    public string adi { get; set; }
    public int yasi { get; set; }
    public string[] harfler { get; set; }

}