1.動態類名,固定方法名,例如.調用不一樣類下邊的GetById()方法:cors
//項目須要引用Miscorsoft.CSharp類庫,不然會報錯:找不到編譯動態表達式所需的一個或者多個類型.
//引用這兩個命名空間
using System.Dynamic;
using System.Reflection;
Assembly asmb = typeof(CityScsbxxbServiceBase).Assembly; //表示調用dll(前提是項目引用該dll) CityScsbxxbServiceBase表示該dll中隨便一個類名 Type type = asmb.GetType(strClassName, false); //strClassName 表示類的名稱,最好寫成完整形式例如:Bobole.Service.City.CityScsbxxbServiceBase dynamic obj1 = System.Activator.CreateInstance(type); object entity = obj1.GetById(primaryKey); //GetById 表示類strClassName 裏邊的一個方法 ,primaryKey表示該方法的參數
///下邊是對象轉換成xml
var ele = new XElement("table");
if (entity != null)
{
var props = entity.GetType().GetProperties();
foreach (var item in props) {
ele.Add(new XElement(item.Name, item.GetValue(entity, null)));
} }
2.動態類名,動態方法(和上邊一種引用同樣)spa
根據接收不一樣的實體調用不一樣的方法:code
//項目須要引用Miscorsoft.CSharp類庫,不然會報錯:找不到編譯動態表達式所需的一個或者多個類型.
//引用這兩個命名空間
using System.Dynamic;
using System.Reflection;
Assembly asmb_Service = typeof(CityScsbxxbServiceBase).Assembly; //引用對應方法的dll
Assembly asmb_entity = typeof(CityScsbxxbBase).Assembly; //引用實體的dllxml
Type type = asmb_entity.GetType(entityClassName, false); //entityClassName爲實體類的名稱(命名空間+類名)
var obj1 = System.Activator.CreateInstance(type);對象
type = asmb_Service.GetType(ServiceClassName, false); //ServiceClassName爲對應方法的類的名稱(命名空間+類名)blog
dynamic service = System.Activator.CreateInstance(type); var method = type.GetMethod("Update", new Type[] { obj1.GetType() }); //Update爲動態方法名稱 if (method == null) throw new Exception("未找到更新方法"); var success = method.Invoke(service, new object[] { obj1 });