.Net 根据类型全名字符串获取类型信息
  dXPLg1SoMZnf 2023年11月02日 72 0

asp.net项目开发过程中用到了多个程序集(dll), 如何根据类型全名(fullname)获取类型信息?

   

如果项目(csproj)中设置了引用对应的dll 或nupkg包,但是代码中没有任务地方引用改该程序集的类,则实际上运行时,该程序集不会被加载到进程中.

假设有一个 ThirdModels.dll, 在该dll中定义命名空间(namespace) ThirdModels, 该命名空间定义了类Person,即Person类的fullname为ThirdModels.Person . 在代码中没有任何地方直接引用ThirdModels.Person。

则如下代码 

var aseemblies = AppDomain.CurrentDomain.GetAssemblies() 

assemblies中不会加载ThirdModels程序集。这种情况下,通过如下调用可以加载程序集到当前进程:

Assembly.Load(assemblyName)

如果代码中由任何地方直接使用了Person类,则系统会自动加载ThirdModels.Person到当前程序集中。

现在给你两个字符串,一个为"ThirdModels.Person", 另一个为从外部接收到的 Person 对象json序列化字符串.如何在你的程序中获得一个Person对象?

代码如下:

        public static object? GetObjFromAssembly(string clsFullName, string instJson, string assemblyName) 
        {
            var assembly = Assembly.Load(assemblyName);
            var type = AppDomain.CurrentDomain.GetAssemblies()?.SelectMany(x => x.DefinedTypes)?.ToHashSet()
                ?.FirstOrDefault(x => x.FullName == clsFullName);
            if (type is not null)
            {
                var obj = JsonSerializer.Deserialize(instJson, type!);
                return obj;
            }
            return null;            
        }

  

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   69   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   52   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   45   0   0 .NET
  f18CFixvrKz8   2024年05月18日   86   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   78   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   41   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   60   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
dXPLg1SoMZnf