我正在使用Automapper,需要實現以下映射,但不知道如何完成。自動映射器映射動態對象
我想將Dictionary對象映射到動態對象,以便鍵是對象上的屬性,而字典的值是動態對象中屬性的值。
這可以用automapper來實現嗎?如果是這樣,怎麼辦?
我正在使用Automapper,需要實現以下映射,但不知道如何完成。自動映射器映射動態對象
我想將Dictionary對象映射到動態對象,以便鍵是對象上的屬性,而字典的值是動態對象中屬性的值。
這可以用automapper來實現嗎?如果是這樣,怎麼辦?
下面是一個例子,但是如果您刪除評論或詳細說明您的帖子,則可能會更具描述性。鑑於這種類:
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));
如果您想包括更多或不同的結果,在GetProperties
方法指定不同的BindingFlags
。如果這沒有回答你的問題,請留下評論。
或者,假設您正在使用動態對象和匿名類型,則此方法類似。以下示例顯然不需要類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));
你可以簡單地得到ExpandoObject
Dictionary
,並與原有的字典填充值
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;
}
有爲什麼你需要的對象是動態的,一個特別的原因,在這種情況呢?正如我所看到的,字典將是'Dictionary'的類型。 –
Mir