我有一个匿名对象,看起来像这样。
var permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
我试着用下面的代码,但没有达到预期的效果。
foreach (var kp in permissions.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
var obj = kp.GetValue(Permissions, null);
var prop = kp.Name + ",View Mode:" + obj.view ;
}
我怎样才能显示对象的名称和值?任何帮助或输入是非常感激的,谢谢。
试试这个就可以了。
static void Test()
{
var permissions = new
{
Module1 = new { view = false, delete = true },
Module2 = new { view = true, delete = true },
};
foreach(var kp in permissions.GetType().GetTypeInfo().DeclaredProperties)
{
var obj = kp.GetValue(permissions);
var objectType = obj.GetType().GetTypeInfo();
foreach (var item in objectType.DeclaredProperties)
{
var prop = kp.Name + ",view mode: " + item.GetValue(obj);
}
}
}
改变它,得到提取格式化的输出。
也许你可以尝试用动态?
dynamic permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
permissions.Module1.view ....
你可以使用 System.Reflection
的命名空间,它包含的类型可以通过检查元数据来检索关于汇编、模块、成员、参数以及托管代码中其他实体的信息。
下面是你如何使用这个命名空间来迭代匿名obj。
var permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
foreach(var p in permissions.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
dynamic objValue = p.GetValue(permissions, null);
Console.WriteLine("Key {0}", ": " + p.Name); //prints obj name
Console.WriteLine("View {0}", ": " + objValue.view); //prints 'view' parameter's value of obj
Console.WriteLine("Delete {0}", ": " + objValue.delete + "\n"); //prints 'delete' parameter's value of obj
}
阅读更多关于 System.Reflection
关于 微软文档.