.NET中是否内置了一种方法,可以将对象的所有属性写入控制台?
当然可以使用反射,但我很好奇这是否已经存在了,特别是你可以在Visual Studio的即时窗口中实现它。在那里,您可以键入一个对象名称(在调试模式下),按enter键,它就会相当漂亮地打印出所有内容。
这样的方法存在吗?
.NET中是否内置了一种方法,可以将对象的所有属性写入控制台?
当然可以使用反射,但我很好奇这是否已经存在了,特别是你可以在Visual Studio的即时窗口中实现它。在那里,您可以键入一个对象名称(在调试模式下),按enter键,它就会相当漂亮地打印出所有内容。
这样的方法存在吗?
当前回答
也许通过JavaScriptSerializer.Serialize?
其他回答
我不这么认为。我总是不得不写它们或者使用别人的工作来获得这些信息。据我所知,这是一种反思。
编辑: 看看这个。我正在调查一些长对象图的调试,并注意到这一点,当我添加手表时,VS在这个类中抛出:Mscorlib_CollectionDebugView<>。它是一种内部类型,用于在监视窗口/代码调试模式中很好地显示集合。现在因为它是内部的,你可以引用它,但你可以使用Reflector复制(从mscorlib)的代码,并有自己的(上面的链接有一个复制/粘贴的例子)。看起来真的很有用。
这正是反思的意义所在。我不认为有更简单的解决方案,但反射并不需要大量代码。
objectdump类就是这样做的。我从未证实过,但我一直怀疑即时窗口使用了这个。
编辑:我刚刚意识到,ObjectDumper的代码实际上在你的机器上。至:
C:/Program Files/Microsoft Visual Studio 9.0/Samples/1033/CSharpSamples.zip
这将解压缩到一个名为LinqSamples的文件夹。在那里,有一个叫objectdump的项目。使用它。
也许通过JavaScriptSerializer.Serialize?
以下代码段将执行所需的功能:
Type t = obj.GetType(); // Where obj is object whose properties you need.
PropertyInfo [] pi = t.GetProperties();
foreach (PropertyInfo p in pi)
{
System.Console.WriteLine(p.Name + " : " + p.GetValue(obj));
}
我认为如果你把它写成扩展方法你可以在所有类型的对象上使用它。