Подтвердить что ты не робот

Способ довольно печатать объект С#

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

4b9b3361

Ответ 1

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

Ответ 2

Если вы используете Json, я бы предложил использовать библиотеку Newtonsofts 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

Ответ 3

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

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

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

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

}

Ответ 5

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

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

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

Ответ 6

  • Install-Package ServiceStack.Text
  • obj.Dump();

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

Ответ 7

Мне это очень понравилось:

string SerilizedText = "";
RootClass myclass= new Root RootClass ();
SerilizedText = JsonConvert.SerializeObject(myclass,Formatting.Indented) ;

Ответ 8

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

Ответ 9

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

public override string ToString()
{
    return String.Format("{0}:{1}:{2}", Property1, Property2, Property3);
}

Ответ 10

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