c# - 使用反射通过对象递归并打印树

标签 c# .net oop reflection recursion

如果我在 C# 中有一个预定义对象,如何使用反射循环遍历该对象的结构进行打印,使其看起来如下所示:

Class PurchaseOrder
------------------
Property: ID     | Type: Int32
Property: Client | Type: Some.Namespace.Client
+----   Property: FirstName | Type: String
+----   Property: LastName  | Type: String
+----   Property: Address   | Type: Some.Namespace.Address
+----   +----    Property: Line1 | Type: String
Property: Date   | Type: DateTime

我想递归遍历对象的结构(不关心里面的实际数据,而只关心属性的名称和类型)。此外,如果它不是基本类型,请继续沿树向下递归(即对象或列表)。

注意:仅限公共(public)成员...

出于某种原因,我似乎无法想象这一点。

上面打印的树的 C# 类如下所示:

class PurchaseOrder {
    public Int32 Id {get;set;}
    public Client Client {get;set;}
    public DateTime Date {get;set;}
}

class Client {
    public string FirstName {get;set;}
    public string LastName  {get;set;}
    public Address Address {get;set}
}

class Address {
    public string Line1 {get;set;}
    ....
}

但是,理想情况下这适用于任何类型。

预先感谢您的帮助:)

最佳答案

使用 ObjectDumper 可以很容易地做到这一点.

这是一个由 Microsoft 编写的开源工具,它似乎完全可以满足您的需求:编写对象属性的文本/可读表示。这是一个简单的类,如果您想调整输出格式,很容易修改。

最简单的使用示例:

ObjectDumper.Write(purchaseOrder)

检查this page获取使用示例。

关于c# - 使用反射通过对象递归并打印树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864628/

相关文章:

c++ - 在类中使用 boost::numeric::odeint

javascript - 重定向到带有发布数据的 div

c# - 在 EF6 中使用枚举作为 FK

c# - WPF:带有图标 View 的 ListView?

c# - 如何为 Lync 2010 和 Skype For Business 编码

c# - 不挂其他控件的WinForms验证

c# - 如何将字符串 key 和 IV 转换为 Rijndael 的字节数组

.net - 缩放后MSChart未处理的溢出异常

multithreading - 为当前调用子程序下的对象提供变量的正确方法?

php - PHP 中的协方差 (OOP) - 它是如何工作的