Using Reflection to create a DataTable from a Class?

后端 未结 9 2001
星月不相逢
星月不相逢 2020-12-02 07:39

I\'ve just learned about Generics and I\'m wondering whether I can use it to dynamically build datatables from my classes.

Or I might be missing the point here. Here

9条回答
  •  我在风中等你
    2020-12-02 08:24

    you can convert the object to xml then load the xml document to a dataset, then extract the first table out of the data set. However i dont see how this be practical as it infers creating streams, datasets & datatables and using converstions to create the xml document.

    I guess for proof of concept i can understand why. Here is an example, but somewhat hesitant to use it.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using System.Data;
    using System.Xml.Serialization;
    
    namespace Generics
    {
    public class Dog
    {
        public string Breed { get; set; }
        public string Name { get; set; }
        public int legs { get; set; }
        public bool tail { get; set; }
    }
    
    class Program
    {
        public static DataTable CreateDataTable(Object[] arr)
        {
            XmlSerializer serializer = new XmlSerializer(arr.GetType());
            System.IO.StringWriter sw = new System.IO.StringWriter();
            serializer.Serialize(sw, arr);
            System.Data.DataSet ds = new System.Data.DataSet();
            System.Data.DataTable dt = new System.Data.DataTable();
            System.IO.StringReader reader = new System.IO.StringReader(sw.ToString());
    
            ds.ReadXml(reader);
            return ds.Tables[0];
        }
    
        static void Main(string[] args)
        {
            Dog Killer = new Dog();
            Killer.Breed = "Maltese Poodle";
            Killer.legs = 3;
            Killer.tail = false;
            Killer.Name = "Killer";
    
            Dog [] array_dog = new Dog[5];
            Dog [0] = killer;
            Dog [1] = killer;
            Dog [2] = killer;
            Dog [3] = killer;
            Dog [4] = killer;
    
            DataTable dogTable = new DataTable();
            dogTable = CreateDataTable(array_dog);
    
            // continue here
    
            }      
        }
    }
    

    look the following example here

提交回复
热议问题