将匿名类型转换为字典

时间:2019-09-22 07:09:36

标签: c# reflection

我正在尝试创建一个将匿名类型转换为字典的函数。 我正在查看此链接thread中可接受的答案。但是我得到了错误

  

不能使用lambda表达式作为动态参数   分派的操作,而无需先将其强制委托给代表   表达式树类型

这就是我想要做的

public Dictionary<string,string> convert(dynamic dtype)
{
 var props = content.GetType().GetProperties();
 var pairs = props.Select(x => x.Name + "=" + x.GetValue(a, null)).ToArray();  // <----Exception
 var result = string.Join("&", pairs);
 return result
} 

关于如何解决此问题的任何建议?我正在尝试这样做

       var student= new
        {
            // TODO: Make this figure out and return underlying device status.
            type = "Active",
        };



 var dict = convert(student);

1 个答案:

答案 0 :(得分:1)

例外在这里:

 x.GetValue(a, null)

只需将a更改为content即可:

var pairs = props.Select(x => x.Name + "=" + x.GetValue(content, null)).ToArray();

内容 是您的匿名对象的名称。

但是您编写的此解决方案不返回dictionary。 如果您想使用字典

public static Dictionary<string, string> convert(object content)
        {

            var props = content.GetType().GetProperties();
            var pairDictionary = props.ToDictionary(x => x.Name,x=>x.GetValue(content,null)?.ToString());
            return pairDictionary;
        }