背景:在我的网站中,第三方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 回答
.NET是强类型的,所以不,你不能将对象转换为不同类型的东西 - 即使内存布局恰好相同,.NET也知道它们是不同的类型 .
要读取对象的属性,而不对其程序集进行编译类型引用,则需要使用Reflection或
dynamic
.dynamic
可能更简单 .如果您需要在应用程序中重复这些步骤,我建议您使用Mapper .
AutoMapper会做你想要的 .
它会将变量的内容从对象复制到另一个对象中的变量(变量名称需要匹配) .
然后,您可以使用完全可编辑的对象(添加接口,继承等),然后在完成后将其"map"返回到原始第三方对象 .