2010-02-12 4 views
4

При отладке приложения ASP.NET я хочу получить распечатку всего состояния очень большого объекта. Я хочу, чтобы все свойства и значения в этом объекте и то же для каждого объекта-свойства были рекурсивно.Сериализация и печать всего состояния объекта при отладке

Поскольку внешний интерфейс приложения истекает после значительной задержки, я не могу добавить часы или использовать окно Immediate или навести курсор на объект, так как не будет достаточного времени для полного изучения объекта ,

Есть ли способ получить полную распечатку объекта в режиме отладки или, скажем, утилиту или функцию C#, которая бы это сделала?

+0

С первого взгляда, Моль выглядит как возможность (http://www.codeproject.com/KB/macros/MoleForVisualStudioEdit.aspx#WhatIs). Однако это может быть немного сложно настроить. Если есть простая и быстрая альтернатива, я бы предпочел это. – Jonathan

ответ

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. 
0

Отражение на самом деле является вашим лучшим выбором здесь. Вы можете начать с вашего корневого объекта, получить все его свойства и их значения, а при необходимости вернуть свойства и значения из этих значений рекурсивно. Это действительно мощная техника, и если вы еще не знаете ее, вы, вероятно, должны ее изучить, и это дает отличный проект для изучения. :)

+2

Я понимаю отражение, спасибо за напоминание, но я просто слишком ленив, чтобы выписать весь код, который необходимо будет учитывать вложенные объекты и т. Д. – Jonathan