Поэтому для просмотра текущего состояния объекта во время выполнения мне очень нравится то, что дает мне окно Visual Studio Immediate. Просто делаю простой
? objectname
Дает мне красиво отформатированный «дамп» объекта.
Есть ли простой способ сделать это в коде, чтобы я мог сделать что-то подобное при регистрации?
Ответы:
Вы можете основывать что-нибудь на коде ObjectDumper, который поставляется с примерами Linq .
Также посмотрите ответ на этот связанный вопрос, чтобы получить образец.
источник
DumpToString
иDump
вObject
классе. Handy.w3wp.exe
вылетает при попытке использоватьObjectDumper
лайкRequest.DumpToString("aaa");
Для более крупного графа объектов я использую Json, но с немного другой стратегией. Сначала у меня есть статический класс, который легко вызвать и со статическим методом, который обертывает преобразование Json (примечание: может сделать это методом расширения).
Тогда в вашем
Immediate Window
,LookHere будет автоматически отображаться в
Locals
окне, перед которым стоит знак $, или вы можете добавить к нему часы. Справа отValue
столбца в инспекторе есть увеличительное стекло с выпадающим курсором рядом с ним. Выберите выпадающий курсор и выберите визуализатор Json.Я использую Visual Studio 2013.
источник
Newtonsoft.Json.JsonConvert.SerializeObject(sampleData, Formatting.Indented)
Я уверен, что есть лучшие способы сделать это, но в прошлом я использовал метод, похожий на следующий, для сериализации объекта в строку, которую я могу зарегистрировать:
Вы увидите, что метод также может возвращать исключение, а не сериализованный объект, поэтому вам нужно убедиться, что объекты, которые вы хотите регистрировать, сериализуемы.
источник
Failed to access type 'System.__ComObject' failed
. Noob to c #, был бы признателен за помощь.Вы можете использовать Visual Studio Immediate Window
Просто вставьте это (
actual
очевидно, измените имя вашего объекта):Он должен печатать объект в JSON
Вы должны иметь возможность скопировать его поверх текстового инструмента или блокнота ++ и заменить экранированные кавычки (
\"
) на"
и новую строку (\r\n
) пустым пространством, затем удалить двойные кавычки ("
) с начала и конца и вставить в jsbeautifier, чтобы сделать его более читабельным.ОБНОВЛЕНИЕ к комментарию OP
это должно позволить вам сбросить любой объект.
Надеюсь, это сэкономит вам время.
источник
Console.Log(Newtonsoft.Json.JsonConvert.SerializeObject(actual));
? :) и да, я действительно это пропустил. Этот вопрос возникает при поиске на google.co.uk/…ServiceStack.Text имеет метод расширения T.Dump () который делает именно это, рекурсивно выгружает все свойства любого типа в удобном для чтения формате.
Пример использования:
и вывод:
источник
He didn't say fields
- сказал онentire objects
, в том числе поля. Он также упомянул функцию Immediate Window в Visual Studio как пример того, чего он хотел достичь ( «Простое выполнение? objectname
даст мне красиво отформатированный« дамп »объекта» ).? objectname
распечатывает все поля.This has been immensely helpful - one of my most used extension methods to date
- Я не сомневаюсь, что это полезно, только то, что он сбрасывает целые объекты.Int32
поле имеетMaxValue
поле, котороеInt32
само по себе ...), это хороший момент, но он не меняет того факта, что объекты - и, конечно, целые - тоже состоят из полей, а не только свойств. Более того (вы не обращались к этому? objectname
вопросу ) в полях отображенияImmediate Window
действительно ли - без запуска бесконечного цикла. Если это касается моего отрицательного голоса, я могу его отозвать (если вы позволите мне, разблокировав его, то есть). Я все равно не согласен в принципе.Вот до глупости простой способ написать хорошо отформатированный плоский объект:
Происходит то, что объект сначала преобразуется во внутреннее представление JSON с помощью
JObject.FromObject
, а затем преобразуется в строку JSON с помощьюToString
. (И, конечно же, строка JSON - очень хорошее представление простого объекта, особенно потому, чтоToString
будет включать символы новой строки и отступы.) «ToString», конечно, не имеет отношения к делу (как это подразумевается при использовании+
для объединения строки и объекта), но Я хотел бы указать это здесь.источник
Вы можете использовать отражение и перебрать все свойства объекта, а затем получить их значения и сохранить их в журнале. Форматирование действительно тривиально (вы можете использовать \ t для отступа свойств объекта и его значений):
источник
Мне нравится переопределять ToString (), чтобы получить более полезный вывод помимо имени типа. Это удобно в отладчике, вы можете видеть нужную информацию об объекте, не расширяя ее.
источник
Я нашел библиотеку под названием ObjectPrinter, которая позволяет легко сбрасывать объекты и коллекции в строки (и многое другое). Он делает именно то, что мне нужно.
источник
Ниже приводится другая версия, которая делает то же самое (и обрабатывает вложенные свойства), которая, на мой взгляд, проще (нет зависимостей от внешних библиотек и может быть легко изменена для выполнения других действий, кроме ведения журнала):
источник
Date
свойство в вашем внутреннем объекте ... просто говорю ...Вы можете написать свой собственный метод WriteLine -
Используйте это как -
Чтобы написать коллекцию, мы можем использовать:
Метод может выглядеть так:
Используя
if, else if
и проверяя интерфейсы, атрибуты, базовый тип и т. Д. И рекурсию (так как это рекурсивный метод), таким образом мы можем достичь дампера объекта, но это наверняка утомительно. Использование дампера объектов из Microsoft LINQ Sample сэкономит ваше время.источник
На основе ответа @engineforce я создал этот класс, который использую в проекте PCL решения Xamarin:
источник
Все указанные выше пути предполагают, что ваши объекты сериализуемы в XML или JSON,
или вы должны реализовать собственное решение.
Но в конце концов вы все равно доберетесь до того, что вам придется решать такие проблемы, как
Плюс журнал, вам нужна дополнительная информация:
Есть лучшее решение, которое решает все это и многое другое.
Используйте этот пакет Nuget : Desharp .
Для всех типов приложений - как веб- приложений, так и настольных .
См. Документацию Desharp Github . Имеет множество вариантов конфигурации .
Просто позвоните куда угодно:
да и вообще для всего, что вы можете найти в среде .NET .
Я верю, что это поможет.
источник