Что лучший способ состоит в том, чтобы вывести все объекты к журналу в C#?

118
задан Matas Vaitkevicius 18 January 2018 в 04:07
поделиться

5 ответов

Вы могли основывать что-то на коде ObjectDumper, который поставлется с образцы Linq .
Имеют также взгляд на ответ этого связанный вопрос для получения образца.

55
ответ дан Community 24 November 2019 в 01:58
поделиться

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

4
ответ дан Darryl Braaten 24 November 2019 в 01:58
поделиться

Вы могли использовать отражение и цикл через все свойства объектов, затем получить их значения и сохранить их к журналу. Форматирование действительно тривиально (Вы могли использовать \t для расположения с отступом свойств объектов и его значений):

MyObject
    Property1 = value
    Property2 = value2
    OtherObject
       OtherProperty = value ...
4
ответ дан Ricardo Villamil 24 November 2019 в 01:58
поделиться

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

  private string ObjectToXml(object output)
  {
     string objectAsXmlString;

     System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(output.GetType());
     using (System.IO.StringWriter sw = new System.IO.StringWriter())
     {
        try
        {
           xs.Serialize(sw, output);
           objectAsXmlString = sw.ToString();
        }
        catch (Exception ex)
        {
           objectAsXmlString = ex.ToString();
        }
     }

     return objectAsXmlString;
  }

Вы будете видеть, что метод мог бы также возвратить исключение, а не сериализованный объект, таким образом, Вы захотите удостовериться, что объекты, которые Вы хотите зарегистрировать, являются сериализуемыми.

26
ответ дан Bernhard Hofmann 24 November 2019 в 01:58
поделиться

У меня есть метод расширения T.Dump () , который делает именно это, рекурсивно выгружает все свойства любого типа в удобном для чтения формате.

Пример использования:

var model = new TestModel();
Console.WriteLine(model.Dump());

и вывод:

{
    Int: 1,
    String: One,
    DateTime: 2010-04-11,
    Guid: c050437f6fcd46be9b2d0806a0860b3e,
    EmptyIntList: [],
    IntList:
    [
        1,
        2,
        3
    ],
    StringList:
    [
        one,
        two,
        three
    ],
    StringIntMap:
    {
        a: 1,
        b: 2,
        c: 3
    }
}
17
ответ дан 24 November 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: