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

Как использовать метод расширения LinqPad.Dump() в Visual Studio?

LINQPad поразителен, особенно полезен метод расширения Dump(), который отображает объекты и структуры практически любого типа, анонимные или нет, на консоль.

Первоначально, когда я перешел в Visual Studio 2010, я попытался создать свой собственный метод Dump, используя делегата, чтобы получить значения для рендеринга для анонимных типов и т.д. Это становится довольно сложным, хотя и в то время как это было весело и сначала мне нужна надежная реализация. Выбрав код LINQPad в рефлекторе, я еще более уверен, что я не верну его реализацию.

Есть ли бесплатная библиотека, которую я могу включить, чтобы обеспечить функциональность Dump?

4b9b3361

Ответ 1

Посмотрите здесь (ваш путь может отличаться):

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Образцы\1033\CSharpSamples.zip\LinqSamples\ObjectDumper

Ответ 2

Я написал метод расширения для Object, который использует сериализатор Json.Net с опцией симпатичного формата. JSON достаточно легко читать при форматировании. Вы пропускаете информацию о типе, но я не знаю, что вам нужно, особенно учитывая, насколько это просто. Еще не подвел меня. Я использую Json.Net, а не MS ', потому что он имеет возможность обрабатывать циклические ссылки в сложных графах, где MS' не может или не был в то время, когда я думал об этом.

    using Newtonsoft.Json;
    public static class Dumper{
        public static string ToPrettyString(this object value)
        {
             return JsonConvert.SerializeObject(value, Formatting.Indented);
        }
    }

Ответ 3

diceguyd30 answer получен из обсуждение (особенно комментарии Пэт Куява и anunay) и описывает, как вызывать реализацию linqPad Dump как из С#, так и из VB.

   public static string DumpToHtmlString<T>(this T objectToSerialize)
        {
            string strHTML = "";
            try
            {
                var writer = LINQPad.Util.CreateXhtmlWriter(true);
                writer.Write(objectToSerialize);
                strHTML = writer.ToString();
            }
            catch (Exception exc)
            {
                Debug.Assert(false, "Investigate why ?" + exc);
            }
            return strHTML;
        }