Способ красивой печати объекта C # - PullRequest
49 голосов
/ 10 июня 2011

У меня есть текстовое поле, и я хочу отобразить в нем объект C # в удобочитаемом виде, просто по причинам отладки. Я не хочу использовать внешние библиотеки, если это возможно. Как мне это сделать?

Ответы [ 10 ]

88 голосов
/ 10 июня 2011

Если вы используете Json, я бы предложил использовать библиотеку Newtonofts Json, а затем вы можете вывести весь объект в нотации Json, и он отформатирует его с пробелами и переносами строк.мы использовали это для простого отображения сложных объектов в целях отладки:

var jsonString = JsonConvert.SerializeObject(
           property, Formatting.Indented,
           new JsonConverter[] {new StringEnumConverter()});

здесь я также использовал преобразователь String Enum для отображения Enums как их строковое представление, а не как целое число.

Библиотека доступна через NuGet как Json.Net или Newtonsoft Json

. Или вы можете получить ее здесь:

http://james.newtonking.com/pages/json-net.aspx

21 голосов
/ 10 июня 2011

Если это только для целей отладки, используйте DebuggerDisplayAttribute .

Использование этого атрибута изменит внешний вид объекта в разделе «Значение» окна просмотра (или при наведении курсора мыши на отладку)

использование:

[DebuggerDisplay("Name = {FirstName} {LastName}")]
public class Person {
  public string FirstName { get; set; }
  public string LastName { get; set; }

}
20 голосов
/ 10 июня 2011

Сериализуйте его в JSON.Это можно сделать методом ToString(), как предлагали другие, но я не думаю, что это уместно, если вы собираетесь использовать это только для отладки.

5 голосов
/ 20 октября 2011

я тоже некоторое время использовал Json; но теперь я создал PrettyPrint-Minimod . Вы можете добавить его через Nuget (это дистрибутив исходного кода). Узнайте, что Minimod здесь.

Он прекрасно печатает графы объектов и обладает магией для перечислимых и словарей. Он также пытается выяснить правильные разрывы строк.

Я скоро напишу об этом в блоге - но попробуйте и попробуйте: -)

4 голосов
/ 10 июня 2011

Простой и простой способ - переопределить метод ToString.

Вот ссылка: Как переопределить ToString

2 голосов
/ 22 декабря 2014
  1. Install-Package ServiceStack.Text
  2. obj.Dump();

Если вы не хотите использовать внешние библиотеки, напишите свой собственный метод расширения Dump ().

1 голос
/ 27 сентября 2018

Это сработало очень мило для меня:

string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Formatting.Indented) ;
1 голос
/ 10 июня 2011

Я использую это совсем немного, чтобы заполнить поля списка пользовательскими объектами:

public override string ToString()
{
    return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}
1 голос
/ 10 июня 2011

Просто переопределите ToString() для вашего типа и укажите собственную отформатированную строку для отображения отладки.

0 голосов
/ 10 июня 2011

Переопределить метод .ToString().

...