序列化&在调试时打印对象的整个状态

时间:2010-02-12 00:53:17

标签: c# .net debugging oop object-state

在调试ASP.NET应用程序时,我希望打印出一个非常大的对象的整个状态。我想要该对象中的所有属性和值,并且每个对象属性都是递归的。

由于应用程序的前端在显着延迟后超时,我无法添加手表或使用立即窗口或将鼠标悬停在对象上,因为没有足够的时间来完全检查对象。

有没有办法在调试模式下完成对象的完整打印输出,或者说实用程序或C#函数可以执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用reflection获取类类型上所有属性和字段的列表,然后使用它来获取每个属性/值的运行时值并将它们吐出到控制台。

PropertyInfo类型(here)和FieldInfo类型(here)是您从自己的类实例的Type对象获取的内容

MyObject myObject = ... //setup my object
Type myType = myObject.GetType(); //or Type.GetType(myObject); //I think

PropertyInfo[] properties = myType.GetProperties();
FieldInfo[] fields = myType.GetFields();

properties[0].GetValue(myObject); //returns the value as an Object, so you may need to cast it afterwards.

答案 1 :(得分:0)

反思真的是你最好的选择。您可以从根对象开始,获取其所有属性及其值,并在必要时以递归方式从这些值中获取属性和值。这是一种非常强大的技术,如果你还不知道它,你可能应该学习它,这是一个完美的学习项目。 :)