使用反射來應對數據實體類的變化

 這是我在寫一個WEB SERVICE時遇到的問題。我需要傳送一個數據對象的集合給客戶端,具體說是傳送一個用戶對象的數組。根據客戶端的要求,我要把數據對象轉化爲dataset返回給客戶端。

這個需求很簡單,自己創建dataset,datatable。把數據對象的field映射爲datatable的列,然後將一個對象轉化爲一條datarow。

不過我發現,這個被傳送的數據對象SESGMemberShipUser可能經常要變化,比如增加個屬性什麼的,這就比較麻煩了。因爲每次當SESGMemberShipUser修改後,我都要重新將數據對象轉換爲dataset。

這時,套用一句流行廣告。多虧有了反射,它的動態調用,能自如地應付這種變化,讓我能安心地睡個好覺:)

 

public DataSet GetUsersInRole(string role)
{

DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
//第一步,使用反射,獲取SESGMemberShipUser的屬性的名字和數據類型,在datatable中爲這些屬性創建對應的datacolumn。

Type theType = Type.GetType("SESGMemberShipUser");
// get all fields
PropertyInfo[] InfoArray = theType.GetProperties();

foreach (PropertyInfo Info in InfoArray)

{

dt.Columns.Add(new DataColumn(Info.Name, Info.PropertyType));//insert the data into the table

}

//第二步,從業務層取得數據對象的集合,然後將每個對象作爲一條記錄,插入到新創見的datatable中。
SESGMemberShipUserCollection users = SESG.Security.SESGRoles.GetSESGUsersInRole(role);
for (int i = 0; i < users.Count; i++)
{
SESGMemberShipUser user = users[i];
DataRow dr = dt.NewRow();
foreach (PropertyInfo Info in InfoArray)
{
dr[Info.Name] = Info.GetValue(user,null);

}

dt.Rows.Add(dr);

}

ds.AcceptChanges();
 

return ds;
}


 

 



 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章