#c# #pretty-print
#c# #красивая печать
Вопрос:
У меня есть текстовое поле, и я хочу отобразить в нем объект C # в удобочитаемом виде, просто из соображений отладки. Я не хочу использовать внешние библиотеки, если это возможно. Как мне это сделать?
Комментарии:
1. Что вы подразумеваете под отображением объекта C #? Отобразить его полное имя, его свойства или что?
Ответ №1:
Если вы используете Json, то я бы посоветовал использовать библиотеку Json Newtonsofts, и тогда вы сможете вывести весь объект в нотации Json, и он отформатирует его с интервалами и разрывами строк. мы использовали это для удобного отображения сложных объектов в целях отладки:
var jsonString = JsonConvert.SerializeObject(
complexObject, Formatting.Indented,
new JsonConverter[] {new StringEnumConverter()});
здесь я также использовал конвертер перечислений строк, чтобы отображать перечисления в виде их строкового представления, а не в виде целого числа.
Библиотека доступна через NuGet в формате Json.Net или Newtonsoft Json
Или вы можете получить его здесь:
Комментарии:
1. Отличный ответ и пример работает, но вызов объекта для сериализации
property
вводит в заблуждение. Или, может быть, я что-то упускаю?
Ответ №2:
Если это просто для целей отладки, используйте DebuggerDisplayAttribute.
Использование этого атрибута изменит внешний вид объекта в разделе значений окна просмотра (или при наведении курсора мыши во время отладки)
использование:
[DebuggerDisplay("Name = {FirstName} {LastName}")]
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
Ответ №3:
Сериализуйте его в JSON. Это можно сделать ToString()
методом, как предлагали другие, но я не думаю, что это уместно, если вы собираетесь использовать это только для отладки.
Комментарии:
1. На самом деле мне нравится эта идея больше, чем свернуть собственную toString() . сериализация JSON покажет каждое общедоступное поле и его значение в гораздо «более легком» формате, чем XML, не затрагивая toString, который может использоваться в другом месте. Вот простой метод расширения toJSON: weblogs.asp.net/scottgu/archive/2007/10/01 /…
2. здесь был бы полезен быстрый и грязный пример, тем более что это может понадобиться новичкам в языке больше всего!
3.
JsonConvert
can от Newtonsoft также имеет параметры форматированияDebug.WriteLine(JsonConvert.SerializeObject(myObject, Formatting.Indented))
4. Я использую красиво напечатанные объекты в утверждениях модульного теста. Это быстрый способ (вырезать и вставить) утверждать, что все поля присутствуют и имеют определенное значение. Огромное ускорение в производстве модульных тестов.
Ответ №4:
Для меня это сработало очень хорошо:
string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Newtonsoft.Json.Formatting.Indented) ;
Ответ №5:
Простой способ — переопределить ToString
метод.
Вот ссылка: Как переопределить ToString
Ответ №6:
я также некоторое время использовал Json; но теперь я создал PrettyPrint-Minimod. Вы можете добавить его через Nuget (это дистрибутив исходного кода). Узнайте, что такое минимод, здесь.
Он красиво печатает графики объектов и обладает некоторой магией для перечислимых значений и словарей. Он также пытается определить правильные разрывы строк.
Я скоро напишу об этом в блоге — но просто продолжайте и попробуйте 🙂
Ответ №7:
Просто переопределите ToString()
свой тип и предоставьте свою собственную форматированную строку для отображения при отладке.
Ответ №8:
Я использую это довольно часто для заполнения полей списка пользовательскими объектами:
public override string ToString()
{
return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}
Ответ №9:
- Установите-Package ServiceStack.Текст
obj.Dump();
Если вы не хотите использовать внешние библиотеки, напишите свой собственный метод расширения Dump().
Комментарии:
1. obj.ToDump() позволяет VS найти правильный пакет, который поможет вам использовать, включает
Ответ №10:
Переопределите .ToString()
метод.
Комментарии:
1. Избегайте решений, основанных только на коде. Объясните с помощью ссылки / описания, поскольку OP может быть неопытным программистом