How do I use the LINQPad Dump() extension method in Visual Studio?

C#Linqpad

C# Problem Overview


LINQPad is amazing, and particularly useful is the Dump() extension methods which renders objects and structs of almost any type, anonymous or not, to the console.

Initially, when I moved to Visual Studio 2010, I tried to make my own Dump method using a delegate to get the values to render for anonymous types, etc. It's getting pretty complicated though and while it was fun and educational at first, I need a solid implementation. Having checked out the LINQPad code in .NET Reflector I am even more assured that I'm not going to get the implementation right.

Is there a free library I can include to provide the Dump functionality?

C# Solutions


Solution 1 - C#

I wrote an extension method to Object that uses the Json.Net serializer with the pretty format option. JSON is easy enough to read when formatted like that. You miss type info, but I don't know that you need that, especially considering how easy this is. Hasn't failed me yet. I use Json.Net and not MS' because it has the capability of handling circular references in complex graphs, where MS' cannot, or didn't at the time I thought of it.

using Newtonsoft.Json;

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

	public static T Dump<T>(this T value)
	{
		Console.WriteLine(value.ToPrettyString());
		return value;
	}
}

Solution 2 - C#

Look here (your path may vary):

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Samples\1033\CSharpSamples.zip\LinqSamples\ObjectDumper

Solution 3 - C#

diceguyd30's answer is sourced from a discussion (especially Pat Kujawa's & anunay's comments) and describes how to call the LINQPad dump implementation from both C# and VB.NET:

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;
}

Solution 4 - C#

There's also a class library named ObjectDumper available as a NuGet package.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiongavView Question on Stackoverflow
Solution 1 - C#Chad RuppertView Answer on Stackoverflow
Solution 2 - C#Raj KaimalView Answer on Stackoverflow
Solution 3 - C#Michael FreidgeimView Answer on Stackoverflow
Solution 4 - C#Carl TonanderView Answer on Stackoverflow