C# 使用带有Automapper的自定义解析器映射列表
我有两个对象需要相互映射。他们看起来像C# 使用带有Automapper的自定义解析器映射列表,c#,collections,mapping,automapper,C#,Collections,Mapping,Automapper,我有两个对象需要相互映射。他们看起来像 public class Example1 { CustomType1 Prop { get; set; } List<CustomType1> List { get; set; } } public class Example2 { Customtype2 Prop { get; set; } List<Customtype2> List { get; set; } } public c
public class Example1
{
CustomType1 Prop { get; set; }
List<CustomType1> List { get; set; }
}
public class Example2
{
Customtype2 Prop { get; set; }
List<Customtype2> List { get; set; }
}
public class CustomType1
{
public string SomeString { get; set; }
}
public class Customtype2
{
public string FirstPartOfSomeString { get; set; }
public string SecondPartOfSomeString { get; set; }
}
公共类示例1
{
CustomType1属性{get;set;}
列表{get;set;}
}
公共课示例2
{
Customtype2属性{get;set;}
列表{get;set;}
}
公共类CustomType1
{
公共字符串SomeString{get;set;}
}
公共类Customtype2
{
某些字符串{get;set;}的公共字符串第一部分
某些字符串{get;set;}的公共字符串第二部分
}
我想制作一个将CustomType1映射到CustomType2的CustomResolver,然后在列表中使用该解析器。比如说,
Mapper.CreateMap<Example1, Example2>()
.ForMember(d => d.Prop, opt => opt.ResolveUsing(myCustomResolver))
.ForMember(d => d.List, opt => opt.ResolveUsing( /*use myCustomResolver on a list here*/));
Mapper.CreateMap()
.ForMember(d=>d.Prop,opt=>opt.resolvesusing(myCustomResolver))
.ForMember(d=>d.List,opt=>opt.resolvesusing(/*在这里的列表上使用myCustomResolver*/);
我尝试过使用类似于:
Mapper.CreateMap<Example1, Example2>()
.ForMember(d => d.Prop, opt => opt.ResolveUsing(myCustomResolver))
.ForMember(d => d.List, opt => opt.MapFrom(s => s.List.Select(myCustomResolver.Resolve).ToList()));
Mapper.CreateMap()
.ForMember(d=>d.Prop,opt=>opt.resolvesusing(myCustomResolver))
.ForMember(d=>d.List,opt=>opt.MapFrom(s=>s.List.Select(myCustomResolver.Resolve).ToList());
但我似乎错过了什么。有没有办法用AutoMapper做到这一点?您是否尝试过在自定义类型之间添加映射,而不是使用解析器? AutoMapper足够智能,可以对列表重新使用映射
Mapper.CreateMap<CustomType1, CustomType2>()
.ForMember(x => FirstPartOfSomeString, opts => opts.MapFrom(x => x.SomeString.Substring(5)))
.ForMember(x => SecondPartOfSomeString, opts => opts.MapFrom(x => x.SomeString.Substring(5, 5)));
Mapper.CreateMap<Example1, Example2>();
Mapper.CreateMap()
.ForMember(x=>SomeString的第一部分,opts=>opts.MapFrom(x=>x.SomeString.Substring(5)))
.ForMember(x=>SomeString的第二部分,opts=>opts.MapFrom(x=>x.SomeString.Substring(5,5));
CreateMap();
请发布CustomResolver代码。这很有效。如果在映射集合之前定义了CustomType1到CustomType2映射,则可以将映射与列表一起重用。谢谢