[英]Convert CookComputing XMLRpcStruct (IEnumerable<Object>) to an actual C# class
[英]How to convert fieldinfo to it's actual class object? using C#
我需要創建一個導航對象結構並打印任何作為參數提供的“結構”的結構的程序。
這些“結構”的定義如下:
問題是當我嘗試打印屬於類或結構的數據成員時。 我試圖編寫一個獲取對象並檢查對象中每個字段的遞歸函數:如果它是一個類,我將curr字段再次發送給同一函數。 否則我會打印該字段的值。
這是我的代碼。 但是當我將fieldInfo發送到函數的代碼行時:---> Type objType = i_obj.GetType();
正在獲取下一個值: object.GetType
返回{Name = "RtFieldInfo" FullName = System.Reflection.RtFieldInfo"} System.RuntimeType
public static void getObj(object i_obj)
{
Type objType = i_obj.GetType();
FieldInfo[] objField = objType.GetFields();
foreach (FieldInfo member in objField)
{
Type memberType = member.FieldType;
if(memberType.IsClass)
{
getObj(member);
}
else
{
Console.WriteLine(member.Name + " : " + member.GetValue(i_obj));
}
}
}
我如何從fieldInfo獲取真實對象?
對於IsClass
為true的字段,您想將該字段的值傳遞給getObj
的嵌套調用。 另外,您可能需要做一些null
檢查:
public static void getObj(object i_obj)
{
Type objType = i_obj.GetType();
FieldInfo[] objField = objType.GetFields();
foreach (FieldInfo member in objField)
{
Type memberType = member.FieldType;
object memberValue = member.GetValue(i_obj); // <---
if (memberValue == null)
{
Console.WriteLine(member.Name + " : null");
}
else if(memberType.IsClass)
{
getObj(memberValue); // <---
}
else
{
Console.WriteLine(member.Name + " : " + memberValue);
}
}
}
執行此操作時:
if(memberType.IsClass)
{
getObj(member);
}
您正在遞歸地調用該方法,但是傳遞回該方法的是member
,它是FieldInfo
。 因此,您將不必查看遞歸地查看字段值的字段,而是查看System.Reflection.FieldInfo
的屬性,我確定這不是您想要的。
也許您想要的是這樣的:
if(memberType.IsClass)
{
getObj(member.GetValue(i_obj));
}
現在,您從字段(某種對象)中獲取值,並以此遞歸地調用您的方法。
我不知道這是干什么的,但是有可能在某些時候您需要考慮館藏。 如果該字段是一個字符串數組,則可能需要返回單個字符串。 或者,如果它是某個對象的列表,則將要遍歷列表中的項目,而不是List<T>
的成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.