动态实例化类:
动态实例化类:
输入类名 系统根据类名通过反射(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 所在的程序集
文章讲述了如何在C#中通过动态实例化类并使用反射技术,特别关注了Type.GetType在跨程序集时可能出现的null问题,以及提供了解决方案,即在调用Type.GetType时指定完整的程序集名称。
39

被折叠的 条评论
为什么被折叠?



