我正在使用 Automapper,需要实现以下映射,但不确定如何完成。
我想将 Dictionary 对象映射到动态对象,以便键是对象上的属性,字典的值是动态对象中属性的值。
这可以通过 automapper 实现吗?如果可以,如何实现?
我正在使用 Automapper,需要实现以下映射,但不确定如何完成。
我想将 Dictionary 对象映射到动态对象,以便键是对象上的属性,字典的值是动态对象中属性的值。
这可以通过 automapper 实现吗?如果可以,如何实现?
您可以简单地Dictionary
从ExpandoObject
原始字典值中获取并填充它
void Main()
{
AutoMapper.Mapper.CreateMap<Dictionary<string, object>, dynamic>()
.ConstructUsing(CreateDynamicFromDictionary);
var dictionary = new Dictionary<string, object>();
dictionary.Add("Name", "Ilya");
dynamic dyn = Mapper.Map<dynamic>(dictionary);
Console.WriteLine (dyn.Name);//prints Ilya
}
public dynamic CreateDynamicFromDictionary(IDictionary<string, object> dictionary)
{
dynamic dyn = new ExpandoObject();
var expandoDic = (IDictionary<string, object>)dyn;
dictionary.ToList()
.ForEach(keyValue => expandoDic.Add(keyValue.Key, keyValue.Value));
return dyn;
}
这是一个示例,但如果您删除评论或详细说明您的帖子,它可能更具描述性。给定这个类:
class Foo
{
public Foo(int bar, string baz)
{
Bar = bar;
Baz = baz;
}
public int Bar { get; set; }
public string Baz { get; set; }
}
您可以通过以下方式创建其公共实例属性和值的字典:
var valuesByProperty = foo.GetType().
GetProperties(BindingFlags.Public | BindingFlags.Instance).
ToDictionary(p => p, p => p.GetValue(foo));
如果要包括更多或不同的结果,BindingFlags
请在GetProperties
方法中指定不同的。如果这不能回答您的问题,请发表评论。
或者,假设您正在使用动态对象和匿名类型,方法类似。显然,以下示例不需要 class Foo
。
dynamic foo = new {Bar = 42, Baz = "baz"};
Type fooType = foo.GetType();
var valuesByProperty = fooType.
GetProperties(BindingFlags.Public | BindingFlags.Instance).
ToDictionary(p => p, p => p.GetValue(foo));