У меня есть текстовое поле, и я хочу отобразить в нем объект С# с точки зрения человека, просто для объяснения причин. Я не хочу использовать внешние библиотеки, если это возможно. Как это сделать?
Способ довольно печатать объект С#
Ответ 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
Или вы можете получить его здесь:
Ответ 3
Если это просто для целей отладки, используйте DebuggerDisplayAttribute.
Использование этого атрибута изменит то, как выглядит объект в разделе "Значение" окна просмотра (или он будет наводиться на мыши во время отладки)
использование:
[DebuggerDisplay("Name = {FirstName} {LastName}")]
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
Ответ 4
Простой и простой способ - переопределить метод ToString
.
Вот ссылка: Как переопределить ToString
Ответ 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()
.