1. 程式人生 > >利用Reflection反射將物件轉化為 List和Model

利用Reflection反射將物件轉化為 List和Model

    public class ReflectionConvertHelper
    {
        public static List<T> ConvertToList<T>(DataTable dt)
        {
            List<T> list = new List<T>();// 定義集合
            Type type = typeof(T);// 獲得此模型的型別
            string fieldName = string.Empty;// 定義欄位名稱
            PropertyInfo[] propertys = type.GetProperties();// 獲得此模型的公共屬性
            foreach (DataRow dr in dt.Rows)
            {
                //新建一個模型
                object obj = type.Assembly.CreateInstance(type.FullName);
                foreach (PropertyInfo propertyInfo in propertys)
                {
                    fieldName = propertyInfo.Name;
                    if (dt.Columns.Contains(fieldName))
                    {
                        if (!propertyInfo.CanWrite) continue;
                        object value = dr[fieldName];
                        if (value != DBNull.Value)
                            propertyInfo.SetValue(obj, value, null);
                    }
                }
                list.Add((T)obj);
            }
            return list;
        }

        public static List<T> ConvertToList<T>(IDataReader reader)
        {
            List<T> list = new List<T>(); // 定義集合
            Type type = typeof(T); // 獲得此模型的型別
            string fieldName = string.Empty; // 定義欄位名稱
            PropertyInfo[] propertys = type.GetProperties();// 獲得此模型的公共屬性
            while (reader.Read())
            {
                //新建一個模型
                object obj = type.Assembly.CreateInstance(type.FullName);
                foreach (PropertyInfo propertyInfo in propertys)
                {
                    fieldName = propertyInfo.Name;
                    if (ReaderExists(reader, fieldName))
                    {
                        if (!propertyInfo.CanWrite) continue;
                        object value = reader[fieldName];
                        if (value != DBNull.Value)
                            propertyInfo.SetValue(obj, value, null);
                    }
                }
                list.Add((T)obj);
            }
            return list;
        }

        public static T ConvertToModel<T>(IDataReader reader)
        {
            Type type = typeof(T);
            PropertyInfo[] proList = type.GetProperties();
            //新建一個模型
            object obj = type.Assembly.CreateInstance(type.FullName);
            string fieldName = string.Empty; // 定義欄位名稱
            if (reader.Read())
            {
                foreach (PropertyInfo propertyInfo in proList)
                {
                    fieldName = propertyInfo.Name;
                    if (ReaderExists(reader, propertyInfo.Name))
                    {
                        if (!propertyInfo.CanWrite) continue;
                        object value = reader[fieldName];
                        if (value != DBNull.Value)
                            propertyInfo.SetValue(obj, value, null);
                    }
                }
            }
            return (T)obj;
        }

        public static T ConvertToModel<T>(DataRow row)
        {
            Type type = typeof(T);
            PropertyInfo[] proList = type.GetProperties();
            //新建一個模型
            object obj = type.Assembly.CreateInstance(type.FullName);
            string fieldName = string.Empty; // 定義欄位名稱
            foreach (PropertyInfo propertyInfo in proList)
            {
                fieldName = propertyInfo.Name;
                if (row.Table.Columns.Contains(fieldName))
                {
                    if (!propertyInfo.CanWrite) continue;
                    object value = row[fieldName];
                    if (value != DBNull.Value)
                        propertyInfo.SetValue(obj, value, null);
                }
            }
            return (T)obj;
        }

        /// <summary>
        /// 驗證reader是否存在某列
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="columnName"></param>
        /// <returns></returns>
        private static bool ReaderExists(IDataReader reader, string columnName)
        {
            int count = reader.FieldCount;
            for (int i = 0; i < count; i++)
            {
                if (reader.GetName(i).Equals(columnName))
                {
                    return true;
                }
            }
            return false;
        }
    }

相關推薦

利用Reflection反射物件化為 ListModel

public class ReflectionConvertHelper { public static List<T> ConvertToList<T>(DataTable dt) {

Gson通過反射Json化為java物件

Gson是Google提供的用來在Java物件和JSON資料之間進行對映的Java類庫。可以將一個Json字元轉成一個Java物件

TcpTransfer 物件化為tcp協議傳輸的byte陣列(根據位元組序位元組數)

最近做一個將物件轉換成tcp資料的功能,將物件按一定規律轉換為byte陣列,可以分類去解析,但是太麻煩了,程式碼冗長.決定採取使用一個通用的方法去實現物件轉陣列的功能 TcpTransfer transfer object (with annotation

如何通過Java程式碼JsonArray化為list集合

在開發中有時候我們有時候會將JSONArray轉化為list的需求 JSONArray jsonArray  =  [{"colName":"2017年01月","addNum":"539","totalNum":"8395"},{"colName":"2017年02月",

Java8中使用filter()過濾列表,使用collectstream化為list

Reference: https://www.mkyong.com/java8/java-8-streams-filter-examples/ /* In Java 8, using stream.filter() to filter a List, and colle

java把實體物件化成listmap

普通方式: 某一個實體有較多欄位,想把實體內的資料顯示到excel中去,但是,又不想低效率的一列一列顯示資料 所以,想把實體物件轉化成list,遍歷表格的同時顯示這個實體的資料. 下面是把實體物件轉化成list和map的方法. 需要引用兩個jar包:commons-b

java圖片化為base64base64轉化為圖片編碼並儲存在本地

直接上程式碼public class Base64Convert {    /**     * @Description: 圖片轉化成base64字串     * @param:    path     * @Return:     */    public static S

利用java反射機制實現List<Map<String, Object>>化為List<JavaBean>

tis one row 註解 網上 span mybatis star mod 最近在用mybatis做項目,遇到將date格式化顯示到easyui的問題,需要將List<Map<String, Object>>轉化為List<JavaBean

利用反射Map化為Object

已經知道物件的型別,以及屬性對應的值,且值儲存在map物件中,將該map轉換為已知型別的物件。 /** * 將Map物件通過反射機制轉換成Bean物件 * * @param map存放資料的map物件 * @param clazz待轉換的class * @r

一個字串物件陣列化為List

String st; Gson gson = new Gson(); Type listType = new TypeToken<List<SearchMo

利用反射xml轉換為List<Object>

反射 uppercase 效率 code varchar2 對象 測試的 trac getname 在將xml轉為實體類的時候,一直對於類型為Integer, date等的很難處理, 無法轉換, 但是後來我發現通過反射可以解決這一問題, 下面和大家分享一下 首先: 給

Android開發List化為JsonArrayJsonObject

客戶端需要將List<Object>轉化為JsonArray和JsonObject的方法: 首先,List中的Object的屬性需要是public: class Person { public String name; public S

Gson基本使用 -- 解析json,jsonArray。任意java物件化為json格式

    Gson是一款幫助解析Json,JsonArray和將Java物件轉換為Json格式的框架。一、將json解析為java物件先看效果圖程式碼實現1.在app模組的build.gradle的dependencies中引入Gsonimplementation 'com.g

Servlet中如何json物件化為Java中的自定義物件

前段ajax$("#form1").submit(function() { var cname = $("input[name=cname]").val(); var sup_compan

javascript中無法string化為json物件

在一次專案之中,我要對請求的相應做一些處理,得到的響應差不多是這中格式‘{total:1,result:[{“age”:1}]}’.可以看到我拿到的這個相應和JSON的格式是非常相似的,一開始我認為只要用JSON.parse進行轉化,但是這始終會報錯,無法進行轉

利用java反射結果集封裝成為物件物件集合

java反射機制是什麼 反射機制是在執行狀態中,可以知道任何一個類的屬性和方法,並且呼叫類的屬性和方法; 反射機制能夠做什麼 1、判斷執行物件的所屬類 2、構造任意一個類的物件 3、獲取任意一個類的屬性和方法 4、呼叫任意屬性和方法 5、

xml檔案物件化為Map物件

一、基本思路 先將xml檔案轉化為document物件,並獲取到根節點,然後依次遍歷二級節點 如果二級節點擁有子節點的話:進入遞迴 如果二級節點沒有子節點的話:將資料封裝在本層Map 中 如果二級節點部分擁有子節點,部分沒有子節點,那麼進行特殊處理。 二、具體程式碼

數組化為List集合

out 字符 轉換 nbsp 輸出 mil tro () sts 字符串轉換為數組、將數組轉換為List集合 public void testStringToList(){ String s="123-abc-456"; System.out.println(

使用JAXB javabean 化為xml物件

最近做微信支付  需要傳遞xml格式的資料。 之前都是用map<String,String>轉xml 感覺

MySQL化為mysqli

har exit etc 語句 mit mman ray 大神 eal <?php/** * Created by PhpStorm. * User: 大神 * Date: 2017/7/24 * Time: 11:29 */header(‘content-type