爲了測試的目的,我想看看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