代码之家  ›  专栏  ›  技术社区  ›  uzay95

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

  •  0
  • uzay95  · 技术社区  · 15 年前

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

    代码:

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

    我应该如何将此数组存储在数据列中?

    1 回复  |  直到 15 年前
        1
  •  0
  •   uzay95    15 年前
    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; }
    
    }