Edo*_*don 6 c# dictionary automapper
我试图将Superhero模型自动映射到Supervillan模型,每个模型都有类似的字典声明:
超级英雄:
public class Superheroes {
public Dictionary<string, SomeHero>> SuperNumber {get; set;}
}
public class SomeHero {
// unique properties
}
Run Code Online (Sandbox Code Playgroud)
Supervillan:
public class Supervillans {
public Dictionary<string, SomeVillan>> SuperNumber {get; set;}
}
public class SomeVillan {
// unique properties
}
Run Code Online (Sandbox Code Playgroud)
我尝试在其他类似的线程中遵循建议,但没有成功.这是我最近的尝试,执行失败:
CreateMap<KeyValuePair<string, Superheroes>, KeyValuePair<string, Supervillans>>();
Run Code Online (Sandbox Code Playgroud)
如何将我的超级英雄SuperNumber
字典映射到我的Supervillan SuperNumber
字典?
注意:SomeHero/SomeVillan模型将具有独特的属性,但我对此问题并不关心它们.
它应该开箱即用。字典不需要显式配置映射:Dynamic 和 ExpandoObjects。如果属性与我的示例中相同,则类也相同。
public class ObjA
{
public string Name { get; set; }
}
public class ObjB
{
public string Name { get; set; }
}
public class ClassA
{
public Dictionary<string, ObjA> Vals { get; set; } = new Dictionary<string, ObjA>{
{"a", new ObjA(){ Name = "A", } },
{"b", new ObjA(){ Name = "B", } },
{"c", new ObjA(){ Name = "C", } },
{"d", new ObjA(){ Name = "D", } },
};
}
public class ClassB
{
public Dictionary<string, ObjB> Vals { get; set; } = new Dictionary<string, ObjB>{
{"a", new ObjB(){ Name = "A", } },
{"b", new ObjB(){ Name = "B", } },
{"c", new ObjB(){ Name = "C", } },
{"d", new ObjB(){ Name = "D", } },
};
}
Run Code Online (Sandbox Code Playgroud)
如果您随后按如下方式使用自动映射器,映射应该会自动工作。
var obja = new ClassA();
var objb = new ClassB();
var config = new MapperConfiguration(cfg => {});
var mapper = config.CreateMapper();
var obj = mapper.Map<ClassB>(obja);
var obj2 = mapper.Map<ClassA>(objb);
Run Code Online (Sandbox Code Playgroud)
如果你想对类的映射进行硬编码,应该这样做:
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<ClassA, ClassB>().ReverseMap();
});
Run Code Online (Sandbox Code Playgroud)