Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用带有Automapper的自定义解析器映射列表_C#_Collections_Mapping_Automapper - Fatal编程技术网

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映射,则可以将映射与列表一起重用。谢谢