LINQPad非常棒,特别有用的是Dump()
扩展方法,它们将几乎任何类型的对象和结构(匿名或非匿名)呈现给控制台。
最初,当我转移到Visual Studio 2010时,我尝试使用委托创建自己的Dump
方法来获取为匿名类型等呈现的值。虽然很有趣但它变得非常复杂和教育起初,我需要一个坚实的实施。检查了.NET Reflector中的LINQPad代码后,我更加确信我不会得到正确的实现。
我可以提供一个免费的库来提供Dump
功能吗?
答案 0 :(得分:51)
我为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);
}
}
答案 1 :(得分:34)
看这里(你的路径可能会有所不同):
C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Samples \ 1033 \ CSharpSamples.zip \ LinqSamples \ ObjectDumper
答案 2 :(得分:11)
diceguyd30的answer来自a discussion (especially Pat Kujawa's & anunay's comments)并描述了如何从C#和VB.NET调用LINQPad转储实现:
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;
}
答案 3 :(得分:9)
还有a class library named ObjectDumper可用作NuGet包。