解决夸dll返回dynamic无法访问

 public static class DynamicFactory
    {
        //创建线程安全(对象不会再同一时刻被多个线程访问)的字典对象
        private static ConcurrentDictionary<Type, Type> s_dynamicTypes = new ConcurrentDictionary<Type, Type>();
        private static Func<Type, Type> s_dynamicTypeCreator = new Func<Type, Type>(CreateDynamicType);
        /// <summary>
        /// 创建object的扩展方法用来扩展匿名对象
        /// </summary>
        public static object ToPublic(this object entity)
        {
            try
            {
                var entityType = entity.GetType();
                var dynamicType = s_dynamicTypes.GetOrAdd(entityType, s_dynamicTypeCreator);

                var dynamicObject = Activator.CreateInstance(dynamicType);
                foreach (var entityProperty in entityType.GetProperties())
                {
                    var value = entityProperty.GetValue(entity, null);
                    //重新给传递过来的匿名类赋值
                    dynamicType.GetField(entityProperty.Name).SetValue(dynamicObject, value);
                }

                return dynamicObject;
            }
            catch (Exception ex)
            {
                Common.WriteLog("ToPublic", ex.ToString());
                return null;
            }
        }

        private static Type CreateDynamicType(Type entityType)
        {
            //创建程序集名称
            try
            {
                var asmName = new AssemblyName("DynamicAssembly_" + Guid.NewGuid());
                //定义程序集
                var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run);
                //在程序集中定义模块
                var moduleBuilder = asmBuilder.DefineDynamicModule("DynamicModule_" + Guid.NewGuid());
                //将传递过来的匿名类型名称重新命名并设置到新的模块程序集中
                var typeBuilder = moduleBuilder.DefineType(
                    entityType.GetType() + "$DynamicType",
                    TypeAttributes.Public);
                //定义该类的构造函数
                typeBuilder.DefineDefaultConstructor(MethodAttributes.Public);
                //循环匿名类中所有字段
                foreach (var entityProperty in entityType.GetProperties())
                {
                    //将匿名类的字段重新定义到当前自定义的程序集中
                    typeBuilder.DefineField(entityProperty.Name, entityProperty.PropertyType, FieldAttributes.Public);
                }
                //创建自定义程序集
                return typeBuilder.CreateType();
            }
            catch (Exception ex)
            {
                Common.WriteLog("ToPublic", ex.ToString());
                return null;
            }
        }
    }//用法 dynamic excelData = new                {                    str_Title = "获取标题",                    str_Code = "获取标题",               dt_SheetTable = datatable                }.ToPublic();
时间: 2024-08-26 14:30:55

解决夸dll返回dynamic无法访问的相关文章

解决nginx发布网站跨目录访问

解决nginx发布网站跨目录访问(thinkphp5+lnmp) 到:usr/local/nginx/conf/vim fastcgi.cof 把最后一行加上井号#注释掉保存重启 restart 参考:http://www.cnblogs.com/q1104460935/p/7028881.html

如何解决mathpage.dll或MathType.dll文件找不到问题

如何解决mathpage.dll或MathType.dll文件找不到问题 MathType 6.9简体中文版是一款功能很强大的数学公式编辑器,但是因为不明原因,有时会出现找不到MathType.dll或者mathpage.dll文件找不到的错误窗口提示,而导致软件无法正常使用,本文将教您解决mathpage.dll或MathType.dll文件找不到的问题. 错误提示: 或者: 甚至运行时出现的: 解决方法: 步骤一:要确保路径被office信任.依次打开word->文件->选项->信任

Windows7解决VBoxDD.dll不能加载

解决VirtualBox在WIN7 X64使用出现的以下问题: Unable to load R3 module D:\Program Files\Oracle\VirtualBox/VBoxDD.dll (VBoxDD):GetLastError=1790 (VERR_UNRESOLVED_ERROR) 返回 代码: E_FAIL (0x80004005) 组件: Console 界面: IConsole {8ab7c520-2442-4b66-8d74-4ff1e195d2b6} 下载下面的

Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)

一.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: Xml代码   <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--   Spring MVC Servlet --> <servlet> <s

解决 对路径bin\roslyn..的访问被拒绝

转载自:http://www.cnblogs.com/hankuikui/p/7574594.html 使用visual studio开发,一重新编译就会报错: 对路径"bin\roslyn\System.Reflection.Metadata.dll"的访问被拒绝 一开始的解决办法就是把bin下的文件都删除了,但是roslyn文件夹下的部分文件一直被占用,必须进程中把vbcscompiler进程干掉,才能删除,再重新编译,就没问题了. 但是过不了多久,编译又出错. 最终终于在网上查到

服务器常见问题,如何解决“远程服务器返回错误”?

在服务器租用中,服务器比较容易出几个问题的其中一个就是"远程服务器返回错误".下面我们看一下如何解决:一."远程服务器返回错误: (501) 未实现"的错误解决方法:Web服务扩展中的WebDAV惹得祸,将IIS的"Web服务扩展"中的"WebDAV"设置成"允许"!PS:iis6的 webdav支持 其实就是个基于http的ftp功能 ,明确iis不能直接上传文件,需要扩展支持的话应该不会饶弯路吧?二.&

解决 codeigniter 3 无法通过URI 访问地址()

故事发生在昨天我电脑中毒重装系统之后.我把codeigniter 重新引入到环境目录之后,就再也无法通过 exmple.com/class/function 的形式访问项目了.于是我试图找apache配置的错误.更改apache 设置.更改 index.php ,删除.htaccess 之后.结果是都!不!管!用!于是我又开始尝试是否是环境的问题,下了一个wordpress 然后我发现.什么啊?work correctly,It's make a sence 啊.在然后我确定了,这个绝对不是ap

一次解决虚拟机内的服务不能访问经历

问题是这样的,在virtualbox中安装了centos系统,然后部署了一个自己的服务,在虚拟机内通过“127*”地址和“192*”地址都能正常访问,但是虚拟机外访问被拒绝 虚拟机内 [[email protected] dsp]# curl http://192.168.199.184:7050/debug/pprof/heap heap profile: 141: 4782544 [1677: 16456768] @ heap/1048576 1: 1376256 [1: 1376256]

解决Android 离线Doc文档访问速度慢的有效方法

(1)我们在访问Android的离线文档,是非常慢的,由于需要加载一些图片或者是动态的脚本语言js代码, 网上的解决方法是删除所有的js含有链接的代码,这种方法不但笨拙,还不可以有效解决: (2)我的方法是,是有一个单独的游览器(作为开发者,至少有那么两三个吧!),来作为访问该离线文档的游览器,比如我的是用google,当我们需要访问的时候,我们可以使用  腾讯管家  360等 把游览器设置为 ---禁止访问网络,然后就可以访问了! 具体我的过程是:我使用的是腾讯管家,右键点解小火箭 进入 流量