ToB企服应用市场:ToB评测及商务社交产业平台

标题: .Net 根据类型全名字符串获取类型信息 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2023-7-20 18:03
标题: .Net 根据类型全名字符串获取类型信息
asp.net项目开发过程中用到了多个程序集(dll), 如何根据类型全名(fullname)获取类型信息?
   
如果项目(csproj)中设置了引用对应的dll 或nupkg包,但是代码中没有任务地方引用改该程序集的类,则实际上运行时,该程序集不会被加载到进程中.
假设有一个 ThirdModels.dll, 在该dll中定义命名空间(namespace) ThirdModels, 该命名空间定义了类Person,即Person类的fullname为ThirdModels.Person . 在代码中没有任何地方直接引用ThirdModels.Person。
则如下代码 
  1. var aseemblies = AppDomain.CurrentDomain.GetAssemblies()
复制代码
assemblies中不会加载ThirdModels程序集。这种情况下,通过如下调用可以加载程序集到当前进程:
  1. Assembly.Load(assemblyName)
复制代码
如果代码中由任何地方直接使用了Person类,则系统会自动加载ThirdModels.Person到当前程序集中。
现在给你两个字符串,一个为"ThirdModels.Person", 另一个为从外部接收到的 Person 对象json序列化字符串.如何在你的程序中获得一个Person对象?
代码如下:
  1.         public static object? GetObjFromAssembly(string clsFullName, string instJson, string assemblyName)
  2.         {
  3.             var assembly = Assembly.Load(assemblyName);
  4.             var type = AppDomain.CurrentDomain.GetAssemblies()?.SelectMany(x => x.DefinedTypes)?.ToHashSet()
  5.                 ?.FirstOrDefault(x => x.FullName == clsFullName);
  6.             if (type is not null)
  7.             {
  8.                 var obj = JsonSerializer.Deserialize(instJson, type!);
  9.                 return obj;
  10.             }
  11.             return null;            
  12.         }
复制代码
  
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4