为了测试的目的,我想看看HttpApplication
对象的所有属性及其相应的值(我正在测试HTTPModule的某些功能)。我的第一个想法是将其序列化为XML,然后查看它或将其写入文件。可能序列化一个不可序列化的对象?
问题是,HttpApplication
不是一个可序列化的类,所以当我尝试序列化时抛出异常。是否还有其他技术,或者甚至有可能获得不可序列化对象的字符串表示形式?我只想看看所有与Intellisense相同的属性及其值。
我见过一些提到Reflection的文章,但是我还没有找到任何暗示它适用于我的场景的文章。
UPDATE:
得到一对夫妇的响应后,它看起来像我需要使用反射。下面是我使用的代码:
Dim sProps As New StringBuilder
For Each p As System.Reflection.PropertyInfo In oHttpApp.GetType().GetProperties()
If p.CanRead Then
sProps.AppendLine(p.Name & ": " & p.GetValue(oHttpApp, Nothing))
End If
Next
在我AppendLine声明,抛出一个异常的时候了:
System.InvalidCastException:运营商“&”字符串 “环境未定义:“并键入'HttpContext'。在 Microsoft.VisualBasic.CompilerServices.Operators.InvokeObjectUserDefinedOperator在 Microsoft.VisualBasic.CompilerServices.Operators.InvokeUserDefinedOperator(UserDefinedOperator 运算,对象[]参数)(UserDefinedOperator 运算,对象[]参数)在 Microsoft.VisualBasic.CompilerServices。 Operators.ConcatenateObject(对象 左,右对象)
@granadaCoder,您提到,我需要知道如何“深”走,我不知道是否这就是问题所在。在上面的错误中,Context
是一个复杂的对象,所以我需要钻取该对象并获取其各个属性,是否正确?你知道我怎么能够做到这一点 - 或者它会像在我的循环内的p
上再次呼叫GetProperties
一样简单吗?
我会做Dim o作为Object = p.GetValue(oHttpApp,Nothing)。看看是什么,然后尝试写出来。你可能需要嵌套某些类型的调用(也就是说,检查“o”的类型,然后递归地调用你的例程.....如果调用它们导致excepiton,你可能不得不忽略其他几个。阿卡,你的代码可能会被非常定制。请记住,我“米不是一个反思的专家。 – granadaCoder 2013-02-22 16:38:59