使用反射通过对象和打印树递归

时间:2012-10-12 17:59:28

标签: 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

我想通过对象的结构(不关心内部的实际数据,但只关注属性的名称和类型)。另外,如果它不是基类型,则继续向下递归树(即对象或列表)。

注意:只有公开成员......

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

以下是上面打印的树的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;}
    ....
}

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

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

使用ObjectDumper进行此操作非常容易。

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

最简单的用法示例:

ObjectDumper.Write(purchaseOrder)

检查this page是否有使用样本。