获取动态类型的属性

Wal*_*ter 4 c# model-view-controller dynamic object

我想知道如何获取动态类型的属性.

这是获取List的功能,

var result = _files.GetFileContent(reportId).Result;
Run Code Online (Sandbox Code Playgroud)

作为示例,我得到一个像这样返回的对象:

在此输入图像描述

当我打开它时,你可以看到我拥有的属性:

在此输入图像描述

这个想法是我永远不知道这些属性.它们可以随着时间而改变.所以我想要一个充满所有属性的列表.所以我可以动态使用它们.

如何从第一项获得属性(ChargesDelta_DIFF_5,ChargesEfile_RIGHT,ChargesGecep_LEFT等)?

Rod*_*A92 11

如果有人仍在为此苦苦挣扎(就像我一样),这可能会有用。

假设您要列出以下所有属性的动态data

这对我有用

using System.ComponentModel;

...

dynamic data = new {
    value1 = 12,
    value2 = "asdasd",
    value3 = 98,
    value4 = "pgiwfj",
};

foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(data))
{
    Console.WriteLine("PROP: " + prop.Name);
}

...
Run Code Online (Sandbox Code Playgroud)

然后它会输出:

  • 道具:值1
  • 道具:值2
  • 道具:值3
  • 道具:值4

来源: https: //social.msdn.microsoft.com/Forums/vstudio/en-US/251e4f3d-ce90-444a-af20-36bc11864eca/how-to-get-list-of-properties-of-dynamic-object- ?论坛=csharpgeneral


Pat*_*man 8

您可以使用反射来获取属性并将其转换为字典:

dynamic v = new { A = "a" };

Dictionary<string, object> values = ((object)v)
                                     .GetType()
                                     .GetProperties()
                                     .ToDictionary(p => p.Name, p => p.GetValue(v));
Run Code Online (Sandbox Code Playgroud)

  • 这如何标记为正确答案,因为它根本不返回动态属性(在 ExpandoObject 上确认)? (2认同)