我需要創建鑽取像兩個或三個深度的對象屬性的能力。例如,類A具有對類B的屬性引用,我需要訪問類C.執行此操作的最佳方式是:直接反射還是使用TypeDescriptor或其他類型?.NET中的深度反射
謝謝。
我需要創建鑽取像兩個或三個深度的對象屬性的能力。例如,類A具有對類B的屬性引用,我需要訪問類C.執行此操作的最佳方式是:直接反射還是使用TypeDescriptor或其他類型?.NET中的深度反射
謝謝。
這不難寫。我把幾個類放在一起來處理這個問題,這樣我就可以序列化WinForm的屬性。看看這個課程和相關的課程。
http://csharptest.net/browse/src/Library/Reflection/PropertySerializer.cs
如果你知道在靜態情況下的路徑(即路徑總是相同)和屬性都可以訪問(內部或公開),您可以使用動態
[Test]
public void Foo()
{
var a = new A
{
B = new B
{
C = new C
{
Name = "hello"
}
}
};
DoReflection(a);
}
private void DoReflection(dynamic value)
{
string message = value.B.C.Name;
Debug.WriteLine(message);
}
我你無論出於何種原因,都想寫你自己的序列化代碼,你將會使用反射。
你所做的是你寫一個遞歸的方法來serlizating一個類型。然後,您可以按照您認爲合適的方式應用此結果。
var type = myObjectOfSomeType.GetType();
// now depending on what you want to store
// I'll save all public properties
var properties = type.GetProperties(); // get all public properties
foreach(var p in properties)
{
var value = p.GetValue(myObjectOfSomeType, null);
Writevalue(p.Name, value);
}
的WriteValue
實施必須認識到內建類型,並相應地對待他們,這跟弦,字符,整數,雙,日期時間等
最終結果是一種遞歸算法,它遍歷對象模型並在遇到類型時寫出值,我知道如何序列化。
不過,我建議考慮WCF,不爲建設服務,但進行序列化。它作爲.NET 3.0框架的一部分發布,並帶有一個新的程序集System.Runtime.Serilization,通常在處理序列化和數據註釋時非常有用。
是屬性public? – Simon 2011-01-14 03:06:05
我們能獲得更多細節嗎?任何類型的用法或示例代碼?我用Reflection完成了各種各樣的事情,但我仍然不確定自己明白自己想做什麼。 – jcolebrand 2011-01-14 03:06:23
@Simon是,它的公衆。 @drachenstern我基本上正在嘗試做@Simon在他的帖子中做的事情。 – 2011-01-14 12:52:57