首页 文章

需要一些方法将对象从第三方DLL转换为本地类的对象

提问于
浏览
0

背景:在我的网站中,第三方HTTP模块在HttpRuntime Cache中构建了一组对象 . 在我的Web应用程序项目中,我需要检查Cache中的这些对象,并在找到具有特定属性值的对象时执行各种操作 .

因此,我循环缓存集合,尝试将每个对象强制转换为本地类的实例(这与第三方类的设计相同) .

(我知道我可以创建对第三方程序集的引用,但可能没有安装程序集,所以我尝试创建一个更健壮的方法) .

但是,演员表不起作用 . ASP.NET知道原始对象来自不同的程序集 . 这是例外:

[A] 3rdParty.HttpModule.CachedRequest无法强制转换为[B] 3rdParty.HttpModule.CachedRequest . 类型A源自位于'C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP的上下文'Default'中的'3rdParty.HttpModule,Version = 3.6.0.0,Culture = neutral,PublicKeyToken = null' . NET Files \ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 710995cc \ 37f36a76_71e5cb01 \ 3rdParty.HttpModule.dll' . 类型B源自位于'C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP的上下文'Default'中的'MyCompany.MyWebsite,Version = 1.4.0.1396,Culture = neutral,PublicKeyToken = null' . NET文件\ root \ 61910352 \ 63f5dc4f \ assembly \ dl3 \ 8bfb9ba0 \ 0c053836_8595cc01 \ MyCompany.MyWebsite.DLL' .

我需要做的就是检查对象中1字符串属性的值 . 有一些(简单的)方法吗?甚至将对象序列化为字符串并解析字符串也可以 .

谢谢

2 回答

  • 1

    .NET是强类型的,所以不,你不能将对象转换为不同类型的东西 - 即使内存布局恰好相同,.NET也知道它们是不同的类型 .

    要读取对象的属性,而不对其程序集进行编译类型引用,则需要使用Reflection或 dynamic . dynamic 可能更简单 .

    dynamic theObject = // get the object from the cache
    DoSomethingWith(theObject.TheProperty);
    
  • 3

    如果您需要在应用程序中重复这些步骤,我建议您使用Mapper .

    AutoMapper会做你想要的 .

    它会将变量的内容从对象复制到另一个对象中的变量(变量名称需要匹配) .
    然后,您可以使用完全可编辑的对象(添加接口,继承等),然后在完成后将其"map"返回到原始第三方对象 .

相关问题