如何将IEnumerable <dynamic>转换为IDictionary&lt;,&gt;?</dynamic>

时间:2014-03-22 02:21:40

标签: c# dynamic dictionary

我从IEnumerable模型中包含的数据实体获取此数据

Address: "test"
AuctioneerId: 0
CharityId: 0
City: "test"

我想把它放在IDictionary<string. object>中以获得标题地址和价值测试。

enter image description here

1 个答案:

答案 0 :(得分:2)

让我们假设你有这样的课程:

class Test
{
    public int Value1 { get; set; }
    public string Value2 { get; set; }
}

Test的实例。

var item = new Test { Value1 = 1, Value2 = "hey!!!" };

要将Dictionary<string, object>的属性名称作为键,将值作为值,您可以使用反射:

var dict = item.GetType()
               .GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty)
               .ToDictionary(p => p.Name, p => p.GetValue(item));

或向Test添加方法并手动创建字典:

public Dictionary<string, object> ToDictionary()
{
    return new Dictionary<string, object>() {
        { "Value1", Value1 },
        { "Value2", Value2 }
    };
}

并使用它:

var dict = item.ToDictionary();

第二个将表现更好,但您必须手动将所有属性写入字典。但实际上,如果您只希望结果字典中存在值的子集,那么这可能是一件好事。