1 c# automapper
我正在使用Automapper,我想知道是否可以将源集合中的所有项目添加到目标.
考虑以下:
public class A { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
public class B { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
Run Code Online (Sandbox Code Playgroud)
然后创建映射:
Mapper.CreateMap<A, B>();
Run Code Online (Sandbox Code Playgroud)
并进行实际映射:
Mapper.Map<A, B>(instanceOfA);
Run Code Online (Sandbox Code Playgroud)
我相信在屏幕后面会发生这种情况:
newInstanceOfB.myDictionary = instanceOfA.myDictionary
Run Code Online (Sandbox Code Playgroud)
但是有可能告诉Automapper这样做(可能是某个东西的自定义转换器......):
foreach (var item in instanceOfA.myDictionary)
newInstanceOfB.myDictionary[item.Key] = item.Value
Run Code Online (Sandbox Code Playgroud)
这似乎对我有用
Mapper.CreateMap<A, B>()
.ForMember(d => d.myDictionary, opt => opt.ResolveUsing(
s => s.myDictionary.ToDictionary(pair => pair.Key, pair => pair.Value)));
Run Code Online (Sandbox Code Playgroud)
这是完整的样本
public class A { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
public class B { public IDictionary<int, string> myDictionary = new Dictionary<int, string>(); }
class Program
{
static void Main(string[] args)
{
var instanceOfA = new A
{
myDictionary = new Dictionary<int, string>
{
{1, "a"},
{2, "b"}
}
};
Mapper.CreateMap<A, B>()
.ForMember(d => d.myDictionary, opt => opt.ResolveUsing(
s => s.myDictionary.ToDictionary(pair => pair.Key, pair => pair.Value)));
var instanceOfB = Mapper.Map<A, B>(instanceOfA);
instanceOfA.myDictionary[1] = "c";
if (instanceOfB.myDictionary[1] == "c")
Console.WriteLine("Failed");
else
Console.WriteLine("Succeeded");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
评论后编辑: *再次编辑*
Mapper.CreateMap<A, B>()
.ForMember(d => d.myDictionary, opt => opt.Ignore())
.AfterMap((s, d) =>
{
d.myDictionary.Clear();
s.myDictionary.ToList().ForEach(p => d.myDictionary.Add(p));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |