[英]Deep Reflection in .NET
我需要創建鑽取兩三個對象屬性的能力。 例如,類A具有對類B的屬性引用,我需要訪問類C.執行此操作的最佳方法是:直接反射,或者可能使用TypeDescriptor,還是其他什么?
謝謝。
寫起來並不難。 我把幾個類放在一起處理這個,所以我可以序列化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);
}
無論出於何種原因,我想寫你自己的序列化代碼,你將使用反射。
你所做的就是你編寫了一個列舉類型的遞歸方法。 然后,您可以根據需要應用此結果。
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
的實現必須識別內置類型並相應地處理它們,這是典型的事情,如字符串,char,整數,double,DateTime等。
最終結果是一個遞歸算法,遍歷您的對象模型並在遇到我知道如何序列化的類型時寫出值。
但是,我建議調查WCF,不是用於構建服務,而是用於序列化。 它作為.NET 3.0框架的一部分提供了一個新的程序集System.Runtime.Serilization,並且在處理序列化和數據注釋時通常非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.