2012-10-12 59 views
1

如果我有在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

@JeffreyKevinPry你不一定需要这个问题的递归。你也可以迭代地解决它。如果你首先做到这一点,那么你应该至少靠近看到可能成为递归的算法部分。 –

+0

不会递归是完成这个最优雅的方法吗? –

回答

1

这将是非常容易使用ObjectDumper做到这一点。

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

使用最简单例子:

ObjectDumper.Write(purchaseOrder) 

检查this page的使用样本。

+0

其实我觉得这正是我正在寻找的! –