LINQPad 非常棒,特别有用的是Dump()
扩展方法,它可以将几乎任何类型的对象和结构呈现给控制台,无论匿名与否。
最初,当我迁移到 Visual Studio 2010 时,我尝试使用委托创建自己的Dump
方法来获取要为匿名类型等渲染的值。尽管它变得非常复杂,虽然起初它很有趣且具有教育意义,但我需要一个扎实执行。在.NET Reflector中检查了 LINQPad 代码后,我更加确信我不会正确地实现。
我可以包含一个免费的库来提供该Dump
功能吗?
LINQPad 非常棒,特别有用的是Dump()
扩展方法,它可以将几乎任何类型的对象和结构呈现给控制台,无论匿名与否。
最初,当我迁移到 Visual Studio 2010 时,我尝试使用委托创建自己的Dump
方法来获取要为匿名类型等渲染的值。尽管它变得非常复杂,虽然起初它很有趣且具有教育意义,但我需要一个扎实执行。在.NET Reflector中检查了 LINQPad 代码后,我更加确信我不会正确地实现。
我可以包含一个免费的库来提供该Dump
功能吗?
我为 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);
}
public static T Dump<T>(this T value)
{
Console.WriteLine(value.ToPrettyString());
return value;
}
}
看这里(您的路径可能会有所不同):
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Samples\1033\CSharpSamples.zip\LinqSamples\ObjectDumper
diceguyd30的答案来自讨论(尤其是 Pat Kujawa 的 & anunay 的评论),并描述了如何从 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;
}
还有一个名为 ObjectDumper 的类库,可用作 NuGet 包。