C#检测AnonymousType new {name = value,}并转换为Dictionary <string,object>

Fox*_*Fox 9 .net c#

我需要检测一个对象是否是匿名创建的,如new {name = value,}

如果它是AnonymousType,它应该将它的属性名称/值添加到a

Dictionary<string,object>
Run Code Online (Sandbox Code Playgroud)

这就是我自己一起攻击的内容:

var name="name";

var obj = new { name = new object(), };

var lookup = new Dictionary<string,object>();


if(obj.GetType().Name.StartsWith("<>f__AnonymousType"))
{
    foreach (var property in obj.GetType().GetProperties())
    {
        lookup[property.Name] = property.GetValue(obj, null);
    }
}
else
{
    lookup[name]=obj;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好/更快的方法来检测AnonymousTypes,或者是否有更好/更快的方法将对象的属性名称/值转储到

Dictionary<string,object>
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 24

要获取对象的所有属性,将其值设置为a Dictionary,您可以将Linq的强大功能耦合到带反射的对象.

您可以使用Enumerable.ToDictionary方法:

var dic = obj.GetType()
             .GetProperties()
             .ToDictionary(p => p.Name,  p=> p.GetValue(obj, null));
Run Code Online (Sandbox Code Playgroud)

这会给你一个回报Dictionary<string, object>.


Sam*_*ell 6

使用新的集合对象初始值设定项语法而不是匿名类型:

var obj = new Dictionary<string, object>()
{
    { "Name", t.Name },
    { "Value", t.Value }
};
Run Code Online (Sandbox Code Playgroud)