动态实例化类:
动态实例化类:
输入类名 系统根据类名通过反射(Reflection)动态实例化类,并返回JSON字符串
实现
[HttpGet, Route("api/TestComm/GetTestCommJson")]
public string GetTestCommJson([FromUri] string TableName)
{
// 类的全名(包括命名空间)
string className = "Models." + TableName;
// 使用反射获取类型信息
Type type = Type.GetType(className + ",Models");
// 检查类型是否存在
if (type != null)
{
// 使用反射创建类的实例
object instance = Activator.CreateInstance(type);
// 输出实例化的对象
return JSONHelper._ObjectToJson(instance);
}
else
{
return $"类 {className} 未找到。";
}
}
问题分析:
Type.GetType()在跨程序集反射时返回null:
在使用Type.GetType来进行反射的话,情况就复杂些。这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string为类型的完全限定名,
如果在当前程序集中使用:
var typeFullName = “Service.Class”;
var type = Type.GetType(ClassName );
如果当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。
解决方案:
var typeFullName = “Service.Class”;
var type = Type.GetType(ClassName +“,Service” );//这里的Service是typeFullName 所在的程序集