Вы могли основывать что-то на коде ObjectDumper, который поставлется с образцы Linq .
Имеют также взгляд на ответ этого связанный вопрос для получения образца.
То, что мне нравится делать, переопределяет ToString () так, чтобы я получил более полезный вывод вне имени типа. Это удобно в отладчике, Вы видите информацию, которую Вы хотите об объекте, не будучи должен развернуть его.
Вы могли использовать отражение и цикл через все свойства объектов, затем получить их значения и сохранить их к журналу. Форматирование действительно тривиально (Вы могли использовать \t для расположения с отступом свойств объектов и его значений):
MyObject
Property1 = value
Property2 = value2
OtherObject
OtherProperty = value ...
Я уверен, что существуют лучшие способы сделать это, но я использовал в прошлом метод что-то как следующее для сериализации объекта в строку, которую я могу зарегистрировать:
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;
}
Вы будете видеть, что метод мог бы также возвратить исключение, а не сериализованный объект, таким образом, Вы захотите удостовериться, что объекты, которые Вы хотите зарегистрировать, являются сериализуемыми.
У меня есть метод расширения 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
}
}