2012-11-29 162 views
0

我想知道是否有.Net中的內置功能可以輸出(在運行時)給定對象中的所有屬性和值,並且如果可能的話甚至包括子對象。查看所有對象的屬性和值(包括子對象)

我在思考Reflection或XML Serializion,看到some people mentioned JSON,但無法真正弄清楚如何以正確的方式做到這一點......有誰知道這是否可能是.Net中的內置功能,或者如果有一個很好的例子/工具,或者已經這樣做,或者可以指引我朝着正確的方向發展?

+0

爲了什麼目的?調試?序列化? –

+2

反射確實可以做到這一點,這就是Reflector和DotPeek的工作原理。 – PinnyM

+0

對不起,@Matthew,用於調試目的 –

回答

1

您可以使用XmlSerializer類或採取一看JSON.Net框架。

+0

順便說一句,請參閱http://msdn.microsoft.com/en-us/library/ms681382%28VS.85%29.aspx((: – abatishchev

+1

@abatishchev haha​​haha'System.InvalidOperationException' – Alechandro

+1

@Alechandro,因爲我看到其他人在說什麼,似乎正確的方式是去這裏2種方法之一... HOPEFULLY有人有更好的建議,但這似乎是迄今爲止我能找到的最好的。謝謝! –

3

使用Reflection

要查看所有的公共屬性和值的對象:

foreach(var prop in obj.GetType().GetProperties()) //note: you can pass in binding flags to GetProperties to get static, private, etc properties 
{ 
    var propVal = prop.GetValue(obj); 

    //prop has information such as Name, PropertyType 
    //propVal is the value of that property for obj 
} 
+0

謝謝@Mohammed - 即使我想我可以寫一個循環,我馬爾科想知道是否有一個預先創建的工具/ .Net功能,只是吐出所有信息n關於在我的對象中保存的數據,因爲我認爲否則,我將不得不編寫數十個case語句來獲取子對象數據(例如,假設我有一個'List(DataRow)'或類似的東西),我只是想知道是否有一個預先設置的工具已經具備了這種功能/知道如何從最常見的對象類型中提取正確的屬性並將它們的值抽出... –

+0

我明白了。對於像IEnumerable/IList/etc這樣的情況,你可能會做一些事情,比如檢查prop.Name.BeginsWith(「ICollection」),然後將其轉換爲ICollection 並以這種方式遞歸地輸出其屬性。然而,我同意一種工具更適合你的需求。 –

+0

爲好主意+1,但事實證明'XMLSerialization'被證明是我採取的最佳途徑 - 謝謝! –