我正在尝试动态显示一个表,具体取决于tableName用户从下拉列表中选择的内容。我从我的Web控制器(.Net Core)传递一个json对象,所以为了做到这一点,我首先使用函数将我的dataTable转换为对象列表
public static List<T> ConvertTableToList<T>(this DataTable table) where T : class, new()
{
try
{
List<T> list = new List<T>();
foreach (var row in table.AsEnumerable())
{
T obj = new T();
foreach (var prop in obj.GetType().GetProperties())
{
try
{
PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name);
propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType), null);
}
catch(Exception ex)
{
throw ex;
}
}
list.Add(obj);
}
return list;
}
catch
{
return null;
}
}
并在我的获取请求中调用此函数
public IActionResult GetTableDetailsByTableName(string TableNameSelected)
{
//To get the data for the Table Selected
DataTable TableDetails = ReferenceTableLogics.getTableDetails(TableNameSelected);
var TableDetailsInList = ConverterClass.ConvertTableToList<CSBM_AGE_BAND>(TableDetails);
return Ok(TableDetailsInList);
}
现在问题是我需要告诉我的班级名称(例如,在这种情况下为CSBM_AGE_BAND
),具体取决于用户在下拉列表中选择的内容(TableNameSelected
)。
有什么方法可以动态地将此类名传递给我的函数ConvertTableToList
?
答案 0 :(得分:0)
使用反射,您可以调用通用扩展方法:
Type genericType = Type.GetType("YourNamespace.ConverterClass");
MethodInfo methodInfo = typeof(ConverterClass).GetMethod("ConvertTableToList", BindingFlags.Public | BindingFlags.Static).MakeGenericMethod(genericType);
var TableDetailsInList = methodInfo.Invoke(null, new object[]{ TableDetails });