2012-10-12 57 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

其實我覺得這正是我正在尋找的! –